类的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))