[java] 任意に定義された匿名インタフェースのメソッドの使用



1 Answers

良い方法は、あなたのケースでは匿名の内部クラスを使用するのではなく、 Fileを拡張し、必要なメソッドを追加する独自のクラスを定義することです。

class StuffedFile extends File {
    // implement all needed constructors
    public void doStuff() { /*.....*/}
}

これで、次のように使用できます。

MyFile f = new MyFile("...");
f.doStuff();

しかし、 Fileを拡張しようとするこの試みの全体が、良いデザインとしては聞こえません。 ファイルを受け入れることができる他のクラスを作成し、それに基づいて処理します。 より優れたカプセル化とコードの再利用性を実現します。

EDITもちろん、反射を使って任意のメソッドを呼び出すことはできますが、私はこの「素晴らしい解決策」と呼ぶことはできません。 私はこの "可能な回避策"と呼ぶことができます。

Question

次のコードを考えてみましょう:

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()うとすると、それは不可能です。 この理由は、 fileFileクラスのオブジェクトとして宣言され、新しい匿名の子クラスのインスタンスとして宣言されないためです。

だから、私の質問は、この行動を達成するための "いい"方法はありますか? 明白なこと以外(クラスを正しく宣言することです)。




そのメソッドにアクセスすることは可能です。 しかし、なぜあなたはこれをやりたいと思うのか分かりません。

public static void main(String[] args) {
   new File("C:\\someFile.txt") {
      public void doStuff() {
          // Do some stuff
      }   
   }.doStuff();
}





Related



Tags

java java