【发布时间】:2018-08-24 08:22:37
【问题描述】:
这就是我想要的:
interface A {}
abstract class B implements A {}
class C extends B { /*few fields*/ }
class D extends B { /*few different fields*/ }
public void doSomething(Class<A> clazz) {
if(clazz.isAssignableFrom(B)) {
doSomethingElse((Class<? extends B>)clazz); // casting is good, but cannot pass this way to doSomethingElse
}
}
public <T extends B> void doSomethingElse(Class<T> clazz) {
if(clazz.isAssignableFrom(C)) {
// do something with C fields
} else if(clazz.isAssignableFrom(D)) {
// do something with D fields
}
}
但显然我不能以这种方式转换类类型。
有办法吗?我很好奇……
谢谢!
【问题讨论】:
-
由于 B 是一个实际类型,没有什么能阻止你将
B.class传递给 doSomethingElse 而不是尝试强制转换clazz。即doSomethingElse(B.class) -
示例不正确,我将其更新为 C 类和 D 类
-
它闻起来有点像设计缺陷...您实际上想对这些字段做什么?您还如何访问这些字段?你会通过反射创建一个新实例吗?老实说,给出适当的答案有点太模糊了......
-
您能具体说明您的问题是什么吗?你提到的有问题的演员表似乎对我有用。
-
是的,演员阵容基本上很好,现在我明白了,但我不能通过 doSomethingElse 方法
标签: java class generics casting