Java mvvmFX在实现的ViewModel的ViewTuple中抛出不兼容的类型

Java mvvmFX在实现的ViewModel的ViewTuple中抛出不兼容的类型,java,javafx,javafx-8,mvvmfx,Java,Javafx,Javafx 8,Mvvmfx,我创建了一个示例项目,如中所示。MyMainViewModel按预期实现de.saxsys.mvvmfx.ViewModel。除类名外,内容与文档中的相同 奇怪的是,start方法中的ViewTuple不接受MainViewModel作为兼容 Error:(28, 102) java: incompatible types: de.saxsys.mvvmfx.ViewTuple<com.erayerdin.imageviewer.views.MainView,de.saxsys.mvvmf

我创建了一个示例项目,如中所示。My
MainViewModel
按预期实现
de.saxsys.mvvmfx.ViewModel
。除类名外,内容与文档中的相同

奇怪的是,
start
方法中的
ViewTuple
不接受
MainViewModel
作为兼容

Error:(28, 102) java: incompatible types: de.saxsys.mvvmfx.ViewTuple<com.erayerdin.imageviewer.views.MainView,de.saxsys.mvvmfx.ViewModel> cannot be converted to de.saxsys.mvvmfx.ViewTuple<com.erayerdin.imageviewer.views.MainView,com.erayerdin.imageviewer.viewmodels.MainViewModel>
MainView.java

环境
  • Java 1.8.0_144
  • JavaFX8.0.141
  • mvvmFX 1.6.0

此问题很可能是由于错误的Java版本造成的。即使您使用的是Java8,我也假设您的IDE/Build系统是用较旧的Java版本配置的

FluentViewLoader
中使用的类型推断在以前的java版本中是不可能的

我用一个标准的maven项目测试了您的类,得到了相同的错误,因为maven默认使用Java1.5(据我所知)。然后我更改了maven设置,以便编译器使用版本1.8作为源和目标版本,如下所示:

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

1.8
1.8
有了这些设置,一切正常

package com.erayerdin.imageviewer.views;

import com.erayerdin.imageviewer.viewmodels.MainViewModel;
import de.saxsys.mvvmfx.FxmlView;
import de.saxsys.mvvmfx.InjectViewModel;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;

import java.net.URL;
import java.util.ResourceBundle;

public class MainView implements FxmlView<MainViewModel>, Initializable {
    @FXML private Label helloLabel;

    @InjectViewModel
    MainViewModel controller;

    public void initialize(URL location, ResourceBundle resources) {
        helloLabel.textProperty().bind(controller.helloMessageProperty());
    }
}
package com.erayerdin.imageviewer.viewmodels;

import de.saxsys.mvvmfx.ViewModel;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class MainViewModel implements ViewModel {
    private StringProperty helloMessage = new SimpleStringProperty("Hello World!");

    public String getHelloMessage() {
        return helloMessage.get();
    }

    public StringProperty helloMessageProperty() {
        return helloMessage;
    }

    public void setHelloMessage(String helloMessage) {
        this.helloMessage.set(helloMessage);
    }
}
<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>