インターフェイスとイベントを使用してUIコードをデカップリングしようとしていますが、イベントを宣言するための方法やベストプラクティスがあるかどうかを知りたいと思いますJavaインタフェースの - C#が提供するもののようなもの:ベストプラクティス - Javaインターフェイスの一部としてイベントを宣言する
// C# event declaration in interface
public interface IAction
{
event EventHandler OnAction;
}
私の目標は、それはそれ(実装)が知られているように、インターフェイスをマークするだけで、特定のタイプのイベントを発生させます。私は、その動作を強制するためだけのドキュメンテーション以上を含めることができると期待しています。私は、Javaが "イベント"キーワードやこれを行う直接的な方法を提供していないことを認識しているので、これを達成するための回避策やベストプラクティスに関する助言を期待しています。
public interface FiresEvent<T extends Event> {
public void fireEvent();
}
...そして私のカスタムインターフェイスでそのインターフェイスを継承する:私はこれを行うと考えることができ
一つの方法は、イベントを発生する機能を表し、一般的なマーカーインターフェイスを作成することです。
public interface MyInterface extends FiresEvent<ActionEvent> {
}
このアプローチの問題は、「FiresEventは」だけでも、一般的なタイプが変化した場合、一度継承することができ、その解決策は、オブジェクトが複数の源となり得る場合のための十分な汎用的ないないようだということですイベント。
私は、人々がこれをどのように処理するのか、またイベントを発生させる必要性を文書化するよりも良い方法があるのかどうか不思議です。
EDIT: たぶん、次は私の質問をクリアします:
私は、発信者がオブジェクトに対するハンドラを登録できるようにすることで、Javaのハンドラリストのアプローチと自己取り扱いを理解しています。私の場合、私はイベントバスに頼っているので、イベントを「放火」イベントと見なして、ハンドラにリダイレクトすることができます。
私は、インターフェイスの責任を定義したい:インタフェースの実装者が何
- インタフェースの実装者がに委任する必要はありません。登録されたリスナー自身
私はJavaイベントに慣れています。私の質問は、インターフェイスがイベントをスローするように指定する際のベストプラクティスについてです。 –
これはどういう意味ですか? http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Core/beans/java/beans/PropertyChangeListener.java.htm – Preston
Javaはイベントを発生させず、登録済みのリスナーを呼び出します。したがって、C#モデルを模倣したい場合は、登録済みのリスナーを呼び出す必要があります。 – Preston