首页 > 解决方案 > 是否可以在返回之前转换返回值?

问题描述

我听说过泛型,但我找不到让它返回已经转换的值的方法。例如:

public <T> T getController(SceneEnum sceneEnum) {
    if (sceneData.get(sceneEnum) == null) {
        initScene(sceneEnum);
    }
    return sceneData.get(sceneEnum).getLoader().getController();
}

此方法返回不同的类,例如 MainScreenControler、PopupController 等,但我无法从返回的类中调用方法,而不进行强制转换。

那么有什么方法可以在 getter 中执行强制转换吗?

标签: javagenerics

解决方案


尝试明确指定泛型

this.<MainScreenController>getController(MainScreenEnum).someMethod();

在包含getController或的类内

instance.<MainScreenController>getController(MainScreenEnum).someMethod();

在不同的类中(instance是包含 的类的实例getController)。

不幸的是,这几乎不比

((MainScreenController) getController(MainScreenEnum)).someMethod();

您不能在 getter 中“强制转换”,因为T它是在调用站点中决定的,而不是在定义站点中决定的。


推荐阅读