其主要的就是匿名类、匿名内部类、回调函数这样,如果你对new TypeToken<List<Object>>(){}.getType();这个很疑惑的话,先想想接口回调吧,看看View.OnClickListener的写法,再看以下示例,想必就会很清晰了。
主要看2处关键字,1:class 与 interface的区别;2: class 与 static class的区别
public class TestAnonymous {
public static class TestAnonymousClass{
public int getValue(){
return 1;
}
}
public class TestAnonymousClass2{
public int getValue(){
return 2;
}
}
public interface TestAnonymousClass3{
public int getValue();
}
public static void main(String[] args) {
int a = new TestAnonymous.TestAnonymousClass(){
private int a = 1;
@Override
public int getValue() {
return ++a;
}
}.getValue();
System.out.println("iii: "+a);
a = new TestAnonymous().new TestAnonymousClass2(){
private int a = 2;
public int getValue() {
return ++a;
};
}.getValue();
System.out.println("iii: "+a);
// 内部类被static修饰,可以直接new 类名.内部类
a = new TestAnonymous.TestAnonymousClass3() {
private int a=3;
@Override
public int getValue() {
// TODO Auto-generated method stub
return ++a;
}
}.getValue();
System.out.println("iii: "+a);
System.out.println("===================================");
// class的方式,可以不用重新方法,就能获取到默认的
a = new TestAnonymous.TestAnonymousClass(){}.getValue();
System.out.println("iii: "+a);
a = new TestAnonymous().new TestAnonymousClass2(){}.getValue();
System.out.println("iii: "+a);
// interface 方式,需要重写interface中的方法
a = new TestAnonymous.TestAnonymousClass3() {
private int a=3;
@Override
public int getValue() {
// TODO Auto-generated method stub
return ++a;
}
}.getValue();
System.out.println("iii: "+a);
}
}