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
答案 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();