[英]How do I now the generic wrapped value on a Property Change Listener on Java Fx?
我有以下代码:
circle2.radiusProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
System.out.println("Change detected for " + observable);
circle1.setRadius(newValue.doubleValue());
}
});
final IntegerProperty lapCounterProperty = new SimpleIntegerProperty();
pathTransition.currentTimeProperty().addListener(new ChangeListener<Duration>() {
@Override
public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
}
});
我怎么知道ChangeListener<>
的类型参数应该是什么?
addListener
方法来自ObservableValue<T>
,它定义了
void addListener(ChangeListener<? super T> listener)
void changed(ObservableValue<? extends S> observable, S oldValue, S newValue)
保持简单(通常没有理由不这样做),如果您拥有ObjectProperty<Duration>
( PathTransition#duration
就是这样),则需要使用ChangeListener<Duration>
,该方法将changed
签名:
void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue)
但也可以使用ChangeListener<T>
对于任何T
其的超类型Duration
( Object
,例如),而changed
收听者的方法可以接受ObservableValue<T>
对于任何T
延伸持续时间。
因此,简短的答案是-如果您没有充分的理由不这样做,请始终为它的ChangeListener
使用与ObservableValue
相同的类型参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.