我有以下代码
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)
而不是其他实例。
现在这是我的问题。
显然,我的概念搞砸了。你们能解释一下发生了什么吗?
摆脱instanceof
if-else
阻止的更好方法是什么?