まず第一に、オペレーターを嫌悪し、嫌悪し、軽蔑する人のためにinstanceof
、私はあなたの懸念を理解していますが、それを使用することに行き詰まっています. これは、別の開発チームがプロジェクトをセットアップする方法を完全にリファクタリングする権限がないためです。そのため、ここで何かが欠けていない限り、それを回避する方法がわかりません。
変更できない Java POJO がありException
、そのプロパティの 1 つとして設定できます。
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
渡されたという事実を変更することはできません。MessageContainer
Message
したがって、私は本当に を使用するのは好きではありませinstanceof
んが、このロジックを実現する他の方法は見当たりません (しかし、ぜひ提案をしてください... に変更を加えることを伴わない限りMessage
) MessageContainer
。またはhandle(MessageContainer)
メソッド!)。
しかし、 を使用してもinstanceof
、このコードはどのように機能するのでしょうか? Exception
からを引き出すと、にキャストされ、 、 などであるかどうかを検出する方法がないため、 のMessage
いずれも起動しないと思います。ここでのオプションは何ですか? 前もって感謝します。instanceof
Exception
BuzzException
FizzException