gpt4 book ai didi

java - mvvmFX 在 ViewTuple 中为已实现的 ViewModel 抛出不兼容的类型

转载 作者:行者123 更新时间:2023-12-02 12:16:42 30 4
gpt4 key购买 nike

我创建了一个示例项目,如getting started documentation of mvvmFX所示。我的 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>

那么,为什么 MainViewModel 实现 de.saxsys.mvvmfx.ViewModelViewTuple 不兼容?

<小时/>

代码

App.java

package com.erayerdin.imageviewer;

import com.erayerdin.imageviewer.viewmodels.MainViewModel;
import com.erayerdin.imageviewer.views.MainView;
import de.saxsys.mvvmfx.FluentViewLoader;
import de.saxsys.mvvmfx.ViewTuple;
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.util.List;

public class App extends Application {
public static List<String> PARAMS;

public static void main( String[] args ) {
launch(args);
}

public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Reian ImageViewer");

ViewTuple<MainView, MainViewModel> viewTuple = FluentViewLoader.fxmlView(MainView.class).load();
Parent root = viewTuple.getView();
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
}

MainView.java

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());
}
}

MainViewModel.java

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);
}
}
<小时/>

环境

  • Java 1.8.0_144
  • JavaFX 8.0.141
  • mvvmFX 1.6.0

最佳答案

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

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

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

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

通过此设置,它可以按预期工作。

关于java - mvvmFX 在 ViewTuple 中为已实现的 ViewModel 抛出不兼容的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46115138/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com