Ошибка при вводе типа при привязке 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-компилятор неверны.

0 ответов

Другие вопросы по тегам