Java instanceOf Class没有按预期进行比较

时间:2017-10-23 08:24:08

标签: 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) {
            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;
    }

虽然这种方法有效,但我觉得这段代码有点冒险。如果有人指出我做错了什么,或者提出另一种方法,那将会很有帮助。提前谢谢!

1 个答案:

答案 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检查对象,而不是您对它的引用;施法与该检查无关。