1

リスナーを作成する3つの方法を知っています。

1.匿名タイプ

 btn.addClickListener(new ButtonClickListener(){
   doSomething();
 })

2.クラスインナータイプ

btn.addClickListener(new MyButtonClickListener());
public MyButtonClickListener implements ButtonClickListener{}

3.外部クラス

上記と同じですが、別のクラスです。

問題

クラスにボタンを使用するフィールドがいくつかあり、ボタンを使って何かをしたい場合、これが最もクリーンな方法ですか?

たとえばString a = "foo"、フィールドとして持っていて、ボタンをクリックすると、このフィールドを変更したいとします。

  • ケース1:使用できるMyClass.this.foo = "bar";
  • ケース2:同じ。
  • ケース3:?(フィールドを参照してカスタムコンストラクターを作成しますか?)
4

2 に答える 2

0

AListenerは他のクラスと同じです。別のオブジェクトのフィールドを操作するクラスのインスタンスが必要な場合は、後者の参照をコンストラクターのパラメーターとして渡し、それをオブジェクト フィールドの 1 つとして保存します。後で、参照されたオブジェクトのパブリック インターフェイスを使用して、必要に応じて操作します。

Listenerもう 1 つの方法 (クラスをもう少し分離する方法) は、関連するすべてのフィールドをListenerクラスに移動することです。これにより、インスタンスはそれらを直接操作できます。実際に を使用するクラス (作成してコンポーネントにアタッチしたクラス) からこれらのフィールドにアクセスする必要があるときはいつでも、Listenerパブリック インターフェイスを使用してインスタンスからそれらを取得できます。もちろん、インスタンスをリスナーとして追加するだけでなく、インスタンスの参照を保存する必要があります (ケース 1 と 2 の場合のように)。

于 2013-02-03T16:39:16.687 に答える
0

ボタンを使用するクラスにいくつかのフィールドがあり、ボタンで何かをしたい場合、どの方法が最もクリーンですか?

一般的に、それは依存します。Sun/Oracle の Java チュートリアルを見ると、さまざまな方法でこれを行っていることがわかります。
4. 可能性もあります: GUI クラスによってインターフェイスを実装します。

個人的には、私の経験から、賢さよりも読みやすさを評価します。これは、私が 1 つの方法に固執し、すべての場合にこの一貫性を使用することを意味します。本当に良い議論がある場合にのみ、スタイルを変更することを考えます. すべての読者は何が起こっているのかを期待しており、その期待は満たされています。周りを探し回ったり、何か他のことが (どこで) 起こっているか心配したりする必要がある場合は、読むことと理解することが遅くなります。
これは通常、匿名の内部クラスにつながります。これらは常にaddListeners()メソッド内で設定されます。いくつかのチェックを行い、より深刻なアクションを実行する必要がある場合は、リスナー内から他の (外部) クラス メソッドを呼び出します。

ケース 1 (匿名内部クラス): MyClass.this.foo = "bar"; を使用できます。

それを試してみてください。(はい、 call でも呼び出すことができますfoo = "bar";)

ケース 2 (内部クラス): 同じ

やってみる(匿名内部クラスと同じケース)

ケース 3: ? (フィールドを参照してカスタム コンストラクターを作成しますか?)

値による呼び出しのため、これは機能しません。(MyButtonClickListener(String foo) .. foo = "bar" はローカル foo のみを変更します)。オブジェクトへの参照を渡し、setField のような getter を呼び出すことができます。

于 2013-02-03T16:41:35.530 に答える