Java ChangeListener作为私有类

Java ChangeListener作为私有类,java,generics,javafx,observable,changelistener,Java,Generics,Javafx,Observable,Changelistener,我正在开发一个游戏,目前我正在尝试为角色的健康实现一个ChangeListener。 我已经为healthProperty定义了一个getter,它实际上是SimpleIntegerProperty的一个实例 我已经将其用作lambda表达式: character1.healthProperty().addListener((可观察、旧值、新值)->{ 系统输出打印项次(可观察); 系统输出打印项次(旧值); System.out.println(newValue); }) ); 当角色受到伤

我正在开发一个游戏,目前我正在尝试为角色的健康实现一个ChangeListener。 我已经为healthProperty定义了一个getter,它实际上是SimpleIntegerProperty的一个实例

我已经将其用作lambda表达式:

character1.healthProperty().addListener((可观察、旧值、新值)->{
系统输出打印项次(可观察);
系统输出打印项次(旧值);
System.out.println(newValue);
}) );
当角色受到伤害时,它会打印出:

整数属性[值:333]

三百五十

333

问题是,我希望能够为游戏中的每个角色重用此侦听器,因此我希望它是一个内部类,但我无法获得正确的类型,到目前为止,我得到了以下结果:

私有类HealthPropertyListener实现ChangeListener{
@凌驾
公共无效已更改(ObservableValue observable、整数oldValue、整数newValue){
//做点什么
}
它没有编译,因为它告诉我没有正确重写该方法

如果我用另一种方法,它是有效的,但我必须将对象强制转换为整数才能使用它们。有没有办法摆脱这种难看的强制转换

私有类HealthPropertyListener实现ChangeListener{
@凌驾
公共无效已更改(可观察值可观察、对象旧值、对象新值){
//做点什么
}
看看
公共接口变更监听器的方法


void已更改(observeValue
SimpleIntegerProperty
实现了
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)