私は複数の場所でエラーメッセージと成功メッセージを生成できるプロセスを持っているので、それらをすべて1つのクラスで追跡し、プロセスの最後に、さまざまなタイプのメッセージをグループ化したいと思います。 これらの行には、何か:ジェネリックを使用してinstanceofを回避する方法はありますか?
public class Message {
String message;
public Message(String message) {
this.message = message;
}
}
public class ErrorMessage extends Message {};
public class FileErrorMessage extends ErrorMessage {};
public class OkMessage extends Message {};
などがあります。 (わかりやすくするために派生クラスのコンストラクタをスキップしています)。私はinstanceofオペレータ、しかしを使用してリストの中で区別することができます。ジェネリックスはよりエレガントだと思いますが、どのようにリスト内でそれらを区別しますか?
Message<ErrorMessage> eMsg = new Message<ErrorMessage>("invalid user");
Message<FileErrorMessage> feMsg = new Message<FileErrorMessage>("file not found");
私は別のクラスの列挙型
enum MessagType { ERROR, FILE_ERROR, OK }
を使用するのではと思ったが、私は解決策を考え出すことができませんでした。ありがとう。
それらとの差別化*何*?完全に汎用的な解決策を探している場合(先験的な未知のことをする場合など)は、[訪問者パターン](https://en.wikipedia.org/wiki/Visitor_pattern)を使用する必要があります。あなたが先験的に知っていることを特定したいなら、多態性を使うことができます。 –
"私はさまざまなクラスで列挙型[...]を使うことを考えました"列挙型フィールドで単一のクラスを使用できます。 'Message'は' MessageType getType() 'や' String getMessage() 'のようなメソッドを提供します。 – Izruo
さて、これらをすべて1つのリストに追加して、将来定義されるエラーをリストに追加できるようにします。 Java Exceptionクラスは、私が記述したパターンに従っているようです。処理の最後に、ErrorMessagesを1つの場所に送信し、別の場所にOkMessagesを送信したいとします。 – bretter