用户界面 - 现在如何在 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)

但是您也可以对任何超T使用ChangeListener<T>,例如Duration的超类型(例如Object),而侦听器的changed方法可以接受任何延长持续时间的TObservableValue<T>

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

相关内容

  • 没有找到相关文章

最新更新