2016-07-13 5 views
0

У меня этот код:Как мне теперь обмениваться обобщенным значением в ListView List на 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<>?

ответ

2

Метод 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 который является супертипом Duration (Object, например), в то время как changed метод слушателя может принять ObservableValue<T> для любого T, который проходит продолжительность.

Таким образом, короткий ответ - если у вас нет веских оснований не делать этого, всегда используйте один и тот же параметр вашего ObservableValue для его ChangeListener.

+0

Я не уверен, что понимаю, что вы говорите/спрашиваете. Подпись 'addListener' вызывает' ChangeListener '(Read - прослушиватель изменений того, что является супертипом T), поэтому, если' T' является 'Duration', я могу использовать' ChangeListener 'или' ChangeListener ', as' Object - это супертип 'Duration' (то есть' 'Duration' extends' Object'). – Itai

+0

Ну, это совершенно правильно. Я думал, вы имеете в виду противоположный путь продления класса Duration. Возможно, мой английский недостаточно хорош, или это немного неоднозначно для меня. – NwDev

+1

Я отредактировал ответ и изменил его на «для любого T, который является супертипом продолжительности», я надеюсь, что это яснее. – Itai

 Смежные вопросы

  • Нет связанных вопросов^_^