一直不明白Java匿名类到底是怎样的类.后来我想到用反射机制试试看
package com;
public class some {/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
new Object(){
public void set(){
System.out.println(this.getClass().getName());
}
}.set();
}
}
结果是:com.some$1
好啊,我试一试:
package com;
public class some {/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
new Object(){
public void set(){
System.out.println(this.getClass().getName());
}
}.set();
new some$1();
}
}
编译错误找不到some$1类
我又建了一个some$1类
package com;public class some$1 {
public void get(){}
}
并运行下面代码:
package com;
public class some {/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
new Object(){
public void set(){
System.out.println(this.getClass().getName());
}
}.set();
new some$1().get();
}
}
其结果是
com.some$1
Exception in thread "main" java.lang.NoSuchMethodError: com.some$1.get()V
at com.some.main(some.java:14)
出现错误,bug呀。匿名类的自动命名与用户命名的类发生了冲突