如何解决Java 中特定有界泛型类型的自定义逻辑
我对 A
、B
和 C
具有以下层次结构:
interface A {
}
class B implements A {
}
class C implements A {
}
我想设计一个通用方法,该方法接受 Set
的任何子类型的 A
,并在子类型为 B
或 C
时执行一些自定义逻辑。
对于上述内容,我有以下代码块:
public class Main {
public static <T extends A> void method1(Set<T> items) {
if (/* condition for instances of B */) {
// some custom logic for type B
} else if (/* condition for instances of C */) {
// some custom logic for type C
} else {
throw new RuntimeException("Type not supported.");
}
}
public static <T extends A> void method2(Set<T> items,Class<T> tClass) {
if (tClass == B.class) {
// some custom logic for B
} else if (tClass == C.class) {
// some custom logic for C
} else {
throw new RuntimeException("Type not supported.");
}
}
}
我想以 method1
的建模方式对其进行建模(在参数列表中不传递额外的 Class<T>
)。 method2
通过传递 Class<T>
参数实现了这一点。
实现这一目标的优雅方式是什么?
我知道 Java 中的类型擦除(因此类型 T
在运行时不可用)。此外,我本可以提取出接口 A
本身中的通用功能,然后简单地调用 item.extractedMethod()
来避免 if-else 块。
所以我只是想看看是否有其他优雅的方式来处理这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。