首先,对于那些憎恶、厌恶和鄙视instanceof
运营商的人,我理解你对它的担忧,但我坚持使用它。那是因为我无权完全重构另一个开发团队设置项目的方式,所以除非我在这里遗漏了一些东西,否则我看不到任何避免它的方法。
我有一个无法更改的 Java POJO,并允许您将其设置Exception
为属性之一:
public class Message {
private Exception exception;
public void setException(Exception exc) {
this.exception = exc;
}
}
同样,我不能改变这个Message
类。
我正在编写一个传递实例的错误处理程序方法,并且我需要根据容器上设置的异常类型MessageContainer
来执行不同操作的逻辑:Message
public class ErrorHandler {
public void handle(MessageContainer container) {
Message msg = container.getMessage();
Exception exc = msg.getException();
if(exc instanceof FizzException)
System.out.println("Do x");
else if(exc instanceof BuzzException)
System.out.println("Do y");
else
System.out.println("Do z");
}
}
同样,我无法更改ErrorHandler#handle
传递 aMessageContainer
而不是可注入Message
实例的事实。
所以,即使我真的不喜欢使用instanceof
,我也看不到任何其他方式来完成这个逻辑(但无论如何,请提出建议......只要他们不涉及对Message
,MessageContainer
,或handle(MessageContainer)
方法!)。
但即使使用 using instanceof
,这段代码又是如何工作的?一旦你将 s 拉出Exception
,Message
我认为任何instanceof
s 都不会触发,因为它会转换为Exception
,无法检测它是否是BuzzException
,FizzException
等。我在这里有什么选择?提前致谢。