java 意味 バージョン - 任意に定義された匿名インタフェースのメソッドの使用
2
Answers
良い方法は、あなたのケースでは匿名の内部クラスを使用するのではなく、 File
を拡張し、必要なメソッドを追加する独自のクラスを定義することです。
class StuffedFile extends File {
// implement all needed constructors
public void doStuff() { /*.....*/}
}
これで、次のように使用できます。
MyFile f = new MyFile("...");
f.doStuff();
しかし、 File
を拡張しようとするこの試みの全体が、良いデザインとしては聞こえません。 ファイルを受け入れることができる他のクラスを作成し、それに基づいて処理します。 より優れたカプセル化とコードの再利用性を実現します。
EDITもちろん、反射を使って任意のメソッドを呼び出すことはできますが、私はこの「素晴らしい解決策」と呼ぶことはできません。 私はこの "可能な回避策"と呼ぶことができます。
ダウンロード インストール download
次のコードを考えてみましょう:
public static void main(String[] args) {
File file = new File("C:\\someFile.txt") {
public void doStuff() {
// Do some stuff
}
};
file.doStuff(); // "Cannot resolve method"
}
新たに定義されたdoStuff()
メソッドをdoStuff()
うとすると、それは不可能です。 この理由は、 file
がFile
クラスのオブジェクトとして宣言され、新しい匿名の子クラスのインスタンスとして宣言されないためです。
だから、私の質問は、この行動を達成するための "いい"方法はありますか? 明白なこと以外(クラスを正しく宣言することです)。
21 votes
java