使用if在超类型和子类型之间进行选择

时间:2014-07-30 20:16:59

标签: java

如果我有两个类SuperTypeSubType SubType扩展SuperType,我可以使用if在运行时检测确切类型吗?< / p>

我的解决方案不起作用如下:

if (t instanceof SubType) 
    do SubType stuff
else
    do SuperType stuff

5 个答案:

答案 0 :(得分:6)

伊兰所说的是真的,但如果你能做到这一点,那么使用instanceof就是一个错误:

class SuperType {
    void doStuff(...) {
        ...do SuperType stuff...
    }
}

class SubType {
    @Override
    void doStuff(...) {
        ...do SubType stuff...
    }
}

SuperType t = methodThatMayReturnSuperTypeOrSubType(...);

t.doStuff();

答案 1 :(得分:4)

是的,您可以将ifinstanceof运算符一起使用。然而,这样做通常是一种设计气味,因为在大多数情况下,这种决定应留给方法调度机制。如果涉及的类型不在您的控制范围内,那么将这种方法添加到这些类型的选项是不可行的。

答案 2 :(得分:2)

你有一个错字。它应该是instanceof

语法为:

if (t instanceof SubType) {
    //do SubType stuff
} else {
    //do SuperType stuff
}

答案 3 :(得分:1)

你可以,例如使用Reflection API。

if (SubType.class.isInstance(t)){
    // do SubType stuff
}else{
    // do SuperType stuff
}

此处有更多详情:

Class.isInstance(Object)

答案 4 :(得分:0)

你应该使用类getClass()方法在运行时检测确切的类。

if (t.getClass() == SubType.class) 
    do SubType stuff
else if (t.getClass() == SuperType.class) 
   do SuperType stuff
else do your stuff