2016-10-22 2 views
0

Я просто хочу знать, возможно ли это. Я использую Javascript в течение 4 лет в качестве веб-разработчика, поэтому я очень привык использовать анонимные функции в своем коде. Теперь, тестируя обработку, я хочу посмотреть, как я могу делать все, что я обычно делаю с Javascript.Обработка Java, используя анонимную функцию

В Javascript, я использую такие функции, как так:

fn.call(instance,arg1, arg2); 

или

fn.apply(instance,args); 

... однако, я не в состоянии сделать что-то подобное в обработке.

Я пытаюсь вызвать «анонимные функции» и запустить функцию в пространстве имен экземпляра:

public void resetHealth(){ 
    this.health = 10; 
} 

class Player{ 
    public int health; 
    Player(){ 
     super(); 
     this.health = 10; 
    } 
} 

Player p = new Player(); 

//where it gets prickly: 

resetHealth.invoke(p); 

Ожидаемый результат: print p.health; //returns 0

Я хочу знать, что я делать неправильно для Java. Однако это может быть связано с обработкой.

+1

Почему функция resetHealth за пределами класса Player? 'this' не имеет никакого контекста или значения в этом методе. –

+0

Причина в том, что я могу делиться функциями и передавать их, а не помещать функции внутри классов. Есть ли способ сделать это? –

+0

См. Java 8 [ссылки на методы] (https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html). Но я бы посоветовал вам просто определить [интерфейсы] (https://docs.oracle.com/javase/tutorial/java/concepts/interface.html) и передать объекты, которые реализуют этот интерфейс. «Ввод методов внутри объектов» - это хорошо :) – paulsm4

ответ

0

В долгосрочной перспективе я рекомендую проверить Daniel Shiffman's OOP Tutorial

Вы должны переместить функцию resetHealth() внутри класса игрока, затем вызвать его с помощью точечной нотации (например p.resetHealth())

class Player { 
    public int health; 
    Player() { 
    super(); 
    this.health = 10; 
    } 
    public void resetHealth() { 
    this.health = 10; 
    } 
} 

void setup() { 
    Player p = new Player(); 

    //test, set lower health 
    p.health = 3; 
    println("lowed health to", p.health); 

    //test, call reset health 
    p.resetHealth(); 
    println("reset health to", p.health); 
} 

Если вы «Я уже привык к JavaScript, вы должны чувствовать себя как дома, используя p5.js, сохраняя при этом большую часть полезных свойств.

+0

Спасибо за быстрый ответ, который ответил на него! Я полагаю, что с Java нет необходимости в небольшом сжатом коде. Я просто хорошо использую наследование классов, что я также делаю с Javascript. –

+0

Java - это скомпилированный язык, поэтому вы обнаружите, что многие вещи более жесткие (например, строгий тип, класс и т. Д.), Где, как интерпретируется JavaScript, становится немного более гибкой с точки зрения динамических типов. Если вы хотите пойти в java, притворитесь, что вы забыли ООП и наследование и начинаете как с нуля с Java. Это может быть проще/менее запутанным, поскольку между языками существует немало различий. Если вы хотите получить большую часть своих знаний JS, я бы посоветовал использовать p5.js. –

Смежные вопросы