簡體   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