我有一个抽象类A.几乎没有更多抽象类扩展A,比如说B,C。现在我有一些扩展B,C的具体类。所以情况看起来像:
abstract class A;
abstract class B extends A;
abstract class C extends A;
class B1 extends B;
class B2 extends B;
class C1 extends C;
class C2 extends C;
B1,B2,C1,C2是chain of responsibility pattern中的链接,它们必须在一个订单中。所以,我有一个定义顺序的枚举。它看起来像:
Enum Order {
B_ORDER (B1.class, B2.class),
C_ORDER (C1.class, C2.class);
Class<? extends A>[] chainOrder;
}
我有一个初始化这个链的工厂方法。它将chainOrder和Type作为输入,并返回相同类型链的头部。
<T extends A> T createChain(Class<? extends A>[] chainOrder, Class<? extends A> chainType) {
// Test if all the classes in chainOrder is of same type given by chainType
// Do some other stuff
}
问题是我可以避免工厂中的类型检查(即可以在编译时注意)吗?
如果没有,确保链包含相同类型链接的正确方法是什么。
欢迎任何其他设计建议。
PS:我们在JDK 1.7
答案 0 :(得分:0)
您可以为createChain
和B
添加一个C
:
<T extends A> T createChain(Class<? extends B>[] chainOrder)
<T extends A> T createChain(Class<? extends C>[] chainOrder)