Я разрабатываю игру, и в настоящее время я пытаюсь реализовать ChangeListener для здоровья персонажа. Я определил геттер для healthProperty, который на самом деле является экземпляром SimpleIntegerProperty.
Я уже заработал как лямбда-выражение:
character1.healthProperty().addListener( ((observable, oldValue, newValue) -> {
System.out.println(observable);
System.out.println(oldValue);
System.out.println(newValue);
}) );
Когда персонаж получает урон, он выводит:
IntegerProperty [значение: 333]
350
333
Дело в том, что я хочу иметь возможность повторно использовать этот слушатель для каждого персонажа в игре, поэтому я бы хотел, чтобы это был внутренний класс, но я не могу правильно определить типы, пока у меня есть это:
private class HealthPropertyListener implements ChangeListener<IntegerProperty> {
@Override
public void changed(ObservableValue<IntegerProperty> observable, Integer oldValue, Integer newValue) {
// Do something
}
Он не компилируется, потому что говорит мне, что я неправильно переопределяю метод.
Если я сделаю это по-другому, это сработает, но мне придется привести объект к целому числу, чтобы использовать их. Есть ли способ избежать этого уродливого актера?
private class HealthPropertyListener implements ChangeListener {
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
//Do something
}