Обработка на Java с использованием анонимной функции

#javascript #java #processing #invoke

#javascript #java #обработка #вызвать

Вопрос:

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

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

 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 в этом методе сейчас нет контекста или значения.

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

3. Смотрите ссылки на методы Java 8. Но я бы посоветовал вам просто определить интерфейсы и вместо этого передавать объекты, которые реализуют этот интерфейс. «Помещение методов внутрь объектов» — это хорошо 🙂

Ответ №1:

В долгосрочной перспективе я рекомендую ознакомиться с руководством Дэниела Шиффмана по ООП

Вы должны переместить свою функцию resetHealth() внутрь класса Player, затем вызвать ее, используя точечную нотацию (например, 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 при этом все еще используется большая часть полезных функций обработки.

Комментарии:

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

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