その2点
- インターフェイスで必要になる可能性のある onClick のような「一般的な」名前を避けるため
- 多くのインターフェイスで同じメソッド名を区別するには
通常、Adapter Patternを使用して解決されます。
interface IFoo {
void onClick();
void onChange();
}
class MyImpl {
void doSomething(){
// real code for onClick
}
void doSomethingElse(){
// real code for onChange
}
IFoo getFooAdapter(){
return new IFoo() {
@Override
public void onClick() {
doSomething();
}
@Override
public void onChange() {
doSomethingElse();
}
};
}
}
基本的に、任意のインターフェイス メソッドへのすべての呼び出しを実際の実装に転送する中間ステップを作成します。
命名と署名は異なる場合があります。必要に応じて、異なるインターフェースに異なるアダプターを提供することもできます (または、両方のインターフェースが異なる動作で競合するメソッドを持っている場合は必要です)。
アダプター インスタンスを配布する方法はいくつかあります。状況によっては、毎回新しいインスタンスを作成するのは賢明ではない場合があります。
もちろん、このパターンは単に楽しみのために実装したり、最小限でクリーンなコードのために実装したりするものではありません。しかし、それは実際の問題を解決することができます。