Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免Java中泛型的冗余参数_Java_Generics - Fatal编程技术网

避免Java中泛型的冗余参数

避免Java中泛型的冗余参数,java,generics,Java,Generics,我正在为我的JavaFX应用程序创建一个助手类,如下所示: public class ViewHelper<T extends Parent, U extends Controller> { private static final String FXML_EXTENSION = ".fxml"; private final Class<? extends Controller> clazz; private FXMLLoade

我正在为我的JavaFX应用程序创建一个助手类,如下所示:

public class ViewHelper<T extends Parent, U extends Controller> {
    private static final String FXML_EXTENSION = ".fxml";
    private final Class<? extends Controller> clazz;
    private FXMLLoader loader;
    private T t;

    public ViewHelper(Class<? extends Controller> clazz) throws IOException {
        this.clazz = clazz;
        this.load();
    }

    private void load() throws IOException {
        this.loader = new FXMLLoader(fxmlUrl());
        this.t = this.loader.load();
    }

    private URL fxmlUrl() {
        return clazz.getResource(clazz.getSimpleName() + FXML_EXTENSION);
    }

    public T component() {
        return t;
    }

    public U controller() {
        return loader.getController();
    }
}
我更喜欢这样的:

var viewHelper = new ViewHelper<BorderPane>(MainController.class);
var viewHelper=新的viewHelper(MainController.class);
或:

var viewHelper=new viewHelper();

谢谢您的帮助。

您可以添加一个要调用的静态方法,而不是构造函数

(类componentType,类controllerType)的公共静态ViewHelper引发IOException{ 返回新的ViewHelper(controllerType); } 你可以这样称呼它:

var viewHelper=viewHelper.of(BorderPane.class,MainController.class);

“当它们始终相同时”它们不必相同,例如
新的ViewHelper(Controller2.class)
也有效。如果参数必须与泛型类型相同,那么参数类型将是
Class
,而不是
Class@Andreas很抱歉给你带来了困惑
当它们始终相同时
意味着每当我实例化
ViewHelper
时,我总是传递相同的类型。在某种程度上,通过不传递两次类型,它还可以避免我传递两种不同类型的可能性,就像您的示例一样。所以,这就是我现在的问题。如何实现它?您不需要,因为
ViewHelper
类被显式声明为支持它们的不同,所以它要求两者都被指定。@Andreas我是编写ViewHelper的人。如何修改
ViewHelper
,使我只能通过菱形操作符(
)或构造函数传入
MainController
?这就像一个符咒。为了仅使用()的
of
方法强制创建
ViewHelper
的实例,我将构造函数
设为private
。多谢各位。
var viewHelper = new ViewHelper<BorderPane, MainController>(MainController.class);
var viewHelper = new ViewHelper<BorderPane>(MainController.class);
var viewHelper = new ViewHelper<BorderPane, MainController>();