java语法,如Object(){}

时间:2012-05-31 18:51:18

标签: java class reflection

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

3 个答案:

答案 0 :(得分:9)

new Object(){}创建anonymous inner class,作为Object的子类。它是Testing的内部类,因此它获得了编译器生成的名称,就像您看到的那样。

答案 1 :(得分:4)

它创建了一个匿名内部类子类Object。我看到空主体的主要用途是在Guice中,TypeLiteral,它用于捕获泛型类型参数:

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

这很有用,因为类型擦除不会在这里应用于超类,因此Guice能够将List<String>部分输出,这不能表示为普通类文字。

答案 2 :(得分: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是类的名称,它是在测试类中定义的第一个匿名类。

这些匿名类可用于在您使用它的地方实现接口,并且可以访问本地最终变量。

final String text = "Written by new Thread";
Thread thread = new Thread(new Runnable(){
     public void run(){
         System.out.println(text);
}});
thread.start();