类的Java实例未按预期进行比较
我有以下代码类的Java实例未按预期进行比较,java,generics,factory-pattern,Java,Generics,Factory Pattern,我有以下代码 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) {
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;
}
publictbuild(对象源,类destClass){
if((对象)destClass instanceof TestDTO){
返回(T)testBuilder.build((BlahDTO)源代码);
}
if((对象)destClass instanceof BestDTO){
返回(T)bestBuilder.build((BlahDTO)源代码);
}
返回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;
}
publictbuild(对象源,类destClass){
if(destClass.getSimpleName().equals(TestDTO.class.getSimpleName())){
返回(T)testBuilder.build((BlahDTO)源代码);
}
if(destClass.getSimpleName().equals(BestDTO.class.getSimpleName())){
返回(T)bestBuilder.build((BlahDTO)源代码);
}
返回null;
}
虽然这种方法有效,但我觉得这段代码有点冒险。如果有人指出我做错了什么,或者建议另一种方法,这会很有帮助。提前谢谢
instanceof
检查左侧操作数是否是右侧操作数的实例。但是您的左手操作数是类
对象,而不是该类的实例。要使用instanceof
,您必须拥有该类的实例(通过new TheClass
创建的实例)
因为,如果您真的想使用类
实例,您可能需要:
旁注:如果((Object)destClass instanceof TestDTO)上的
(Object)
强制转换没有任何作用instanceof
检查对象,而不是对它的引用类型;强制转换与该检查无关。请注意,类不是类的实例,将类强制转换为对象也不会使其成为实例。改为使用Class.isAssignableFrom()
。请参阅
if (TestDTO.class.isAssignableFrom(destClass))