JAvaで匿名クラスを使用した直接newインタフェースの詳細とインスタンスコード

1203 ワード

JAva:匿名クラスを使用した直接newインタフェース
JAvaの匿名クラスには不思議な使い方があります.次のコードの例を参照してください.

package contract;
 
 public interface ISay {
   void sayHello();
 }

上は簡単なインタフェースで、次はどのように使用しますか.

package jimmy;
import contract.ISay;
public class Program {
  public static void main(String[] args) {
    ISay say = new ISay() {     
      public void sayHello() {
        System.out.println("Hello java!");
      }
    };
  }
}

最初は、「インタフェース実装を提供しない場合、インタフェースインスタンスを直接newした」ように見え、C#erにとっては、三観を破壊する急ぎの足があった.
幸いなことに、binディレクトリの下のclass出力を観察すると、Program 1.classのようなファイルが見つかります.逆コンパイルで観察すると、コンパイラが自動的にクラスProgram 1.classのファイルを生成していることがわかります.逆コンパイルで観察すると、コンパイラが自動的にクラスProgram 1を生成していることがわかります.

package jimmy;

import contract.ISay;
import java.io.PrintStream;

class Program$1
 implements ISay
{
 public void sayHello()
 {
  System.out.println("Hello java!");
 }
}

場合によっては、インタフェースの実装クラスを一時的に作成するだけで、上記のテクニックはコードを簡略化するために使用することができる.
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!