我有一个抽象类 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
最佳答案
您可以为 B
和 C
添加一个 createChain
:
<T extends A> T createChain(Class<? extends B>[] chainOrder)
<T extends A> T createChain(Class<? extends C>[] chainOrder)
关于java - 避免在通用工厂方法中出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23901814/