繁体   English   中英

现在如何在Java Fx的属性更改侦听器上使用通用包装的值?

[英]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)

ChangeListener<S>定义:

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其的超类型DurationObject ,例如),而changed收听者的方法可以接受ObservableValue<T>对于任何T延伸持续时间。

因此,简短的答案是-如果您没有充分的理由不这样做,请始终为它的ChangeListener使用与ObservableValue相同的类型参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM