java正在查找什么类型的类
我有三个班,A班,B班,C班。这三个类都实现了“ClassInterface”接口
class ClassA<T> implements ClassInterface<T>{}
class ClassB<T> implements ClassInterface<T>{}
class ClassC<T> implements ClassInterface<T>{}
我在其他类别D中有方法:
void methodname(ClassInterface<T> CI[]){}
在方法中,我需要找到每个元素属于哪个类?i、 e CI[i]属于A类、B类还是C类
我试过“instacneof”,但它给了我错误。我不知道我的方法是否正确
# 1 楼答案
泛型是使用类型擦除实现的,这意味着
ClassInterface<String>
和ClassInterface<Double>
在运行时都只是普通的原始ClassInterface
因此,这样的事情毫无意义:
因为在运行时,字节码会说
正如其他海报所提到的,这种类型的铸造是一种代码气味,这表明了一个糟糕的设计。如果您必须根据
ClassInterface
的实现进行一些处理,那么根据您的情况,您应该考虑:Class<T> getType();
,然后执行一个if语句,如:# 2 楼答案
转换您的观点,而不是试图从调用方方法理解类型,给每个类一个不同的实现,让每个类都有一个专门的行为
这意味着在ClassA、ClassB和ClassC中实现一个由接口声明的公共方法,并从调用方调用它
# 3 楼答案
确保您没有尝试模板化检查实例。。。模板参数在编译过程中被“擦除”,因此您无法访问它们进行instanceof和其他运行时检查
但是,是的,你所做的通常表明你的设计很糟糕
# 4 楼答案
那将是一个糟糕的设计理念!你本质上是“向上投射”。将参数作为接口传递的要点是,被调用的方法不应该知道或关心实现类是什么