可选的通用参数或防止类型错误的方法

时间:2018-10-08 09:18:25

标签: java generics casting type-erasure

问题归结为“是否可能有?”或可以解决以下问题的设计模式。

我正在处理的事物的层次结构可以总结如下:

Dispatcher
 - Controller
   - Main View Component
   - Optional Mini Controller
     - Optional View Component

这里的每个组件都有一个抽象,这个抽象做了很多后端工作,每个具体的类都填补了一些空白。

困扰我的是:

定义:

Controller<T extends AbstractWhatever, U> {
    T abstractMainView;
    AbstractMiniController abstractMiniController;
}

实际情况:

Controller<ConcreteMainView, UnderlyingObjectType> {
    abstractMainView.ConcreteMethod; // works
    abstractMiniController.ConcreteMethod; // does not work
}

因为主控制器对主视图有一个通用T,所以主视图被声明为T,当我创建具体的主控制器时,我为{{ 1}},它现在知道我的主视图的所有方法。

但是,由于可选的控制器/视图没有提供作为类型参数的具体类,因此我必须进行大量转换:

T

是的,我不能给控制器一个类型参数:

Controller<MainView, Type> {
    MainView.doStuff();
    ((ConcreteOptionalController) COP).doStuff();
    ((ConcreteOptionalController) COP).doSomeMoreStuff();
    ((ConcreteOptionalController) COP).doAllTheStuffs();
}

因为有时我什么都没放。我只是停留在无休止的公里长的强制转换+陈述中,还是有办法使这项工作更加完美?

0 个答案:

没有答案