2
Class clazz = new Object(){}.getClass();

なぜこれが可能で、それはどういう意味ですか?誰かが私に思い出させてくれませんか?

例えば:

public class Testing {
    public static void main(String[] args) {
        Class clazz = new Object(){}.getClass();
        System.out.println(clazz);
    }
}

結果は次のとおりです。class Testing$1

4

3 に答える 3

9

new Object(){}のサブクラスとして、匿名の内部クラスを作成しますObject。これはの内部クラスでTestingあるため、見たようなコンパイラ生成の名前を取得します。

于 2012-05-31T18:52:19.657 に答える
4

匿名の内部クラス サブクラス化 を作成しますObject。空のボディで私が見た主な用途は、Guice の forTypeLiteralであり、ジェネリック型引数をキャプチャするために使用されます。

key = new TypeLiteral<List<String>>() {};

ここでは型消去がスーパークラスに適用されないため、Guice はList<String>通常のクラス リテラルとして表現できない部分を取り出すことができるため、これは便利です。

于 2012-05-31T18:53:08.067 に答える
1

次のコードと同じです。

public class Testing{
      private class Anon extends Object{
      }
      public static void main(String[] args) {
          Class clazz = new Anon().getClass();
          System.out.println(clazz);
      }
}

Testing$1クラスの名前で、クラス Testing で定義された最初の匿名クラスです。

これらの匿名クラスは、使用する場所でインターフェイスを実装するために使用でき、ローカルの最終変数にアクセスできます。

final String text = "Written by new Thread";
Thread thread = new Thread(new Runnable(){
     public void run(){
         System.out.println(text);
}});
thread.start();
于 2012-05-31T18:55:13.927 に答える