我有这个类:
public class Bird extends AbstractEntity<Long> implements IHasWings {
}
还有一些继承了AbstractEntity
类但没有实现IHasWings
接口的其他类,例如:
public class Cat extends AbstractEntity<Long>{
}
我将这些类作为类型参数传递给它们的DAO类,像这样:
:
public class BirdDAO extends AbstractDAO<Bird, Long> { ... }
并且。
public class CatDAO extends AbstractDAO<Cat, Long> { ... }
所有DAO类都继承自AbstractDAO
类。
在AbstractDAO
类中,我有以下代码:
public abstract class AbstractDAO<T extends AbstractEntity<ID>, ID extends Serializable> {
public List<T> findAll(){
AbstractEntity entity = ...
if (entity instanceof IHasWings) {
IHasWings entityWithWings = (IHasWings) entity;
//Do something with entityWithWings.getWingSize();
}else{
//Do something else
}
}
}
我希望测试传递的类型参数是否实现了
IHasWings
,如上所示,但我找不到方法来实现它。我尝试了以下方法:
Class<T> entity = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
if (entity instanceof IHasWings) {...}
出现这个错误: Class<T> 和 IHasWings 的条件操作数类型不兼容
我该如何解决?
if (entity instanceof IHasWings)
等同于class instanceof class
。按照定义,类不是任何实例。 - Michael