使用多态而不是instanceof

时间:2017-11-16 03:00:32

标签: java polymorphism instanceof

我有以下代码

public OrgSpecificException translate (Throwable t) {
    OrgSpecificException e;

    if (t instanceof OrgSpecificExceptionTypeA) {
        // do some stuff
        e = new SubClassAOfOrgSpecificException("message");
    } else if (t instanceof OrgSpecificExceptionTypeB) {
        // do other stuff
        e = new SubClassBOfOrgSpecificException("message");
    } else {
        e = new OrgSpecificException();
    }

    return e;
}

我尝试用以下代码替换这个if-else块

public SubClassAOfOrgSpecificException translateObj (OrgSpecificExceptionTypeA e) {
        // do some stuff
        e = new SubClassAOfOrgSpecificException("message"); 
}

public SubClassBOfOrgSpecificException translateObj (OrgSpecificExceptionTypeB e) {
        // do some stuff
        e = new SubClassBOfOrgSpecificException("message"); 
}

public OrgSpecificException translateObj (Throwable e) {
        // do some stuff
        e = new OrgSpecificException("message");    
}

然后更改原始方法translate,如此OrgSpecificException e = translateObj(t)。我认为通过调用translateObj将根据什么类型的对象t来调用,但令我惊讶的是,它只实例化translateObj (Throwable e)而不是其他实例。

现在这是我的问题。

  1. 显然,我的概念搞砸了。你们能解释一下发生了什么吗?

  2. 摆脱instanceof if-else阻止的更好方法是什么?

0 个答案:

没有答案