Ошибка при вводе типа при привязке ReactFx Var.mapBidirectional к свойству JavaFx
Я пытаюсь связать TextField.textProperty()
к ObjectProperty<LocalDateTime>
в пользовательском контроле. Следующий код компилируется и запускается в Eclipse:
package main.java
import java.time.LocalDateTime;
import org.reactfx.value.Var;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleStringProperty;
public class Playbook {
public void bindTimeString(final ObjectProperty<LocalDateTime> timepoint, final SimpleStringProperty textProperty) {
Var.mapBidirectional(textProperty, s -> LocalDateTime.now(), t -> "").bindBidirectional(timepoint);
}
}
Однако, когда я создаю свое приложение с помощью Maven, я получаю ошибку компиляции:
javac -classpath reactfx-2.0-M5.jar Playbook.java
Playbook.java:12: error: no suitable method found for bindBidirectional(ObjectProperty<LocalDateTime>)
Var.mapBidirectional(textProperty, s -> LocalDateTime.now(), t -> "").bindBidirectional(timepoint);
^
method Property.bindBidirectional(Property<Object>) is not applicable
(argument mismatch; ObjectProperty<LocalDateTime> cannot be converted to Property<Object>)
method Var.bindBidirectional(Property<Object>) is not applicable
(argument mismatch; ObjectProperty<LocalDateTime> cannot be converted to Property<Object>)
1 error
Обходной путь должен объявить временный Var<LocalDateTime
держа mapBidirectional
результат, а затем связать его.
public void bindTimeString(final ObjectProperty<LocalDateTime> timepoint, final SimpleStringProperty textProperty) {
final Var<LocalDateTime> v = Var.mapBidirectional(textProperty, s -> LocalDateTime.now(), t -> "");
v.bindBidirectional(timepoint);
}
компилируется с Eclipse и из командной строки с Maven, как и ожидалось.
Это похоже на ошибку компилятора в реализации вывода типа, но я не эксперт по спецификации языка Java. Я ожидаю, что типы могут быть выведены из лямбда-возвращаемых значений. В любом случае, либо Java-компилятор Eclipse, либо JDK-компилятор неверны.