Java ChangeListener作为私有类
我正在开发一个游戏,目前我正在尝试为角色的健康实现一个ChangeListener。 我已经为healthProperty定义了一个getter,它实际上是SimpleIntegerProperty的一个实例 我已经将其用作lambda表达式:Java ChangeListener作为私有类,java,generics,javafx,observable,changelistener,Java,Generics,Javafx,Observable,Changelistener,我正在开发一个游戏,目前我正在尝试为角色的健康实现一个ChangeListener。 我已经为healthProperty定义了一个getter,它实际上是SimpleIntegerProperty的一个实例 我已经将其用作lambda表达式: character1.healthProperty().addListener((可观察、旧值、新值)->{ 系统输出打印项次(可观察); 系统输出打印项次(旧值); System.out.println(newValue); }) ); 当角色受到伤
character1.healthProperty().addListener((可观察、旧值、新值)->{
系统输出打印项次(可观察);
系统输出打印项次(旧值);
System.out.println(newValue);
}) );
当角色受到伤害时,它会打印出:
整数属性[值:333]
三百五十
333
问题是,我希望能够为游戏中的每个角色重用此侦听器,因此我希望它是一个内部类,但我无法获得正确的类型,到目前为止,我得到了以下结果:
私有类HealthPropertyListener实现ChangeListener{
@凌驾
公共无效已更改(ObservableValue observable、整数oldValue、整数newValue){
//做点什么
}
它没有编译,因为它告诉我没有正确重写该方法
如果我用另一种方法,它是有效的,但我必须将对象强制转换为整数才能使用它们。有没有办法摆脱这种难看的强制转换
私有类HealthPropertyListener实现ChangeListener{
@凌驾
公共无效已更改(可观察值可观察、对象旧值、对象新值){
//做点什么
}
看看公共接口变更监听器的方法
:
void已更改(observeValueSimpleIntegerProperty
实现了observeValue
,因此正确的签名应为:
public void changed (ObservableValue<? extends Number> observableValue, Number oldValue, Number newValue)
public void changed(observeValue注意SimpleIntegerProperty
实现了observeValue
。因此您需要一个ChangeListener
。此类型参数的changed
方法的正确签名为
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue)
public void已更改(observeValue
public void changed (ObservableValue<? extends Number> observableValue, Number oldValue, Number newValue)
private void healthChanged (ObservableValue<? extends Number> obs, Number oldValue, Number newValue) {
...
}
...
// inside a method in the same class
character1.healthProperty().addListener(this::healthChanged);
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue)