首先,对于那些憎恶、厌恶和鄙视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我认为任何instanceofs 都不会触发,因为它会转换为Exception,无法检测它是否是BuzzException,FizzException等。我在这里有什么选择?提前致谢。