#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 .