gpt4 book ai didi

java - 避免在通用工厂方法中出现 ClassCastException

转载 作者:行者123 更新时间:2023-12-02 09:26:33 25 4
gpt4 key购买 nike

我有一个抽象类 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

最佳答案

您可以为 BC 添加一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com