java中的匿名类有一个倍儿神奇的用法,见下面代码示例:
public interface callBackListener{
public abstract void set(int x);
}
上面是一个简单的接口,下面是如何使用:
public class Dem{
callBackListener needd = new callBackListener(){
@Override
public void set(int x) {
// TODO Auto-generated method stub
}
};
}
初看上去,就好象在“不提供接口实现的情况下,直接new了一个接口实例”,还好这只是假象,观察bin目录下的class输出,会发现有一个类似Program$1.class的文件,如果反编译观察一下,发现原来是编译器自动生成一个类
这种做法在一个类中需要实现回调制作时会很好用。如下
public class A{
private callBackListener mcallBackListener;
public interface callBackListener{
public abstract void set(int x);
}
public void setViewCallBackListener(callBackListener mcallBackListener){
this.mcallBackListener = mcallBackListener;
}
public method(){
if(mcallBackListener != null){
mcallBackListener.set(5);
}
}
}
而其他类使用者只需实现类似callBackListener needd = new callBackListener(){} 匿名类,并调用 A.setViewCallBackListener()方法