我有以下代码,
public <T> T build(Object source, Class<T> destClass) {
if((Object)destClass instanceof TestDTO){
return (T) testBuilder.build((BlahDTO) source);
}
if((Object)destClass instanceof BestDTO) {
return (T) bestBuilder.build((BlahDTO) source);
}
return null;
}
我试图比较destClass是否为TestDTO或BestDTO类型,并采取相应的行动。但即使destClass属于指定类型,比较也会失败。我错过了什么,也是我的替代方法,
public <T> T build(Object source, Class<T> destClass) {
if(destClass.getSimpleName().equals(TestDTO.class.getSimpleName())){
return (T) testBuilder.build((BlahDTO) source);
}
if(destClass.getSimpleName().equals(BestDTO.class.getSimpleName())) {
return (T) bestBuilder.build((BlahDTO) source);
}
return null;
}
虽然这种方法有效,但我觉得这段代码有点冒险。如果有人指出我做错了什么,或者提出另一种方法,那将会很有帮助。提前谢谢!
答案 0 :(得分:2)
instanceof
检查左侧操作数是否是右侧操作数的 实例。但是你的左手操作数是一个Class
对象,而不是该类的实例。要使用instanceof
,您必须拥有该类的实例(通过new TheClass
创建的内容)。
作为Thomas points out,如果您真的想要使用Class
个实例,则可能需要isAssignableFrom
代替:
if (TestDTO.class.isAssignableFrom(destClass))
附注:(Object)
上的if((Object)destClass instanceof TestDTO)
演员没有任何目的。{1}}。 instanceof
检查对象,而不是您对它的引用;施法与该检查无关。