Java instanceOf Class 未按预期进行比较
Java instanceOf Class not comparing as expected
我有以下代码,
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;
}
虽然这种方法有效,但我觉得这段代码有点冒险。如果有人指出我做错了什么,或者建议一种替代方法,那将会很有帮助。提前致谢!
instanceof
检查左侧操作数是否是 右侧操作数的 实例。但是您的左侧操作数是一个 Class
对象,而不是 class 的一个实例。要使用 instanceof
,您必须具有 class 的 实例 (通过 new TheClass
创建的东西)。
改为, if you really mean to be working with Class
instances, you may want isAssignableFrom
:
if (TestDTO.class.isAssignableFrom(destClass))
旁注:(Object)
投射到 if((Object)destClass instanceof TestDTO)
没有任何意义。 instanceof
检查 对象 ,而不是你对它的那种引用;铸造与该检查无关。
我有以下代码,
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;
}
虽然这种方法有效,但我觉得这段代码有点冒险。如果有人指出我做错了什么,或者建议一种替代方法,那将会很有帮助。提前致谢!
instanceof
检查左侧操作数是否是 右侧操作数的 实例。但是您的左侧操作数是一个 Class
对象,而不是 class 的一个实例。要使用 instanceof
,您必须具有 class 的 实例 (通过 new TheClass
创建的东西)。
改为Class
instances, you may want isAssignableFrom
:
if (TestDTO.class.isAssignableFrom(destClass))
旁注:(Object)
投射到 if((Object)destClass instanceof TestDTO)
没有任何意义。 instanceof
检查 对象 ,而不是你对它的那种引用;铸造与该检查无关。