0

I tried to write change listener for IntegerProperty without lambda expression. I found that:

IntegerProperty x = new SimpleIntegerProperty(3);
x.addListener( new ChangeListener<Number>() {
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        System.out.println(newValue);
    }
} );

works, and that:

IntegerProperty x = new SimpleIntegerProperty(3);
x.addListener( new ChangeListener<Integer>() {
    public void changed(ObservableValue<? extends Integer> observable, Integer oldValue, Integer newValue) {
        System.out.println(newValue);
    }
} );

does not.

Could someone explain it to me why the second example gives error?

hal
  • 831
  • 3
  • 13
  • 32
  • [`IntegerProperty`](http://docs.oracle.com/javase/8/javafx/api/javafx/beans/property/IntegerProperty.html) implements `ObservableValue` (not `ObservableValue`). – James_D Apr 12 '16 at 16:58
  • Because of the method signature in [IntegerPropertyBase](https://docs.oracle.com/javase/8/javafx/api/javafx/beans/property/IntegerPropertyBase.html#addListener-javafx.beans.value.ChangeListener-) `public void addListener(ChangeListener super java.lang.Number> listener)`. You are only allowed to use Number super types. – aw-think Apr 12 '16 at 16:59

0 Answers0