匿名類new一個介面產生,匿名類的作用
new ActionListener(){} 相當於動態的實現了介面,在記憶體中建立了一個ActionListener物件,
區別就是這個物件的實現類就直接在另一個程式碼中定義了,而不是獨立的檔案。
我們一般稱這種類為匿名類,當然,匿名類不止實現介面這一種。比如 一個介面 A ,裡面有一個方法fun1(),一般我們是先定義它的實現再引用它,比如
public class ImpA implements A{
public void fun1(){
//do some thing...
}
}
然後在另一個類呼叫
public class Class1 {
public void method1(){
A a = new ImpA();
}
}
但有時我想對這個介面做另一個實現不想使用ImpA,但由於是臨時的又不想去做定義,則你就可以這樣
public class Class1 {
public void method1(){
A a = new A(){ //相當於在記憶體中直接產生了一個介面的實現並引用這個記憶體物件。動態的程式碼
public void fun1(){
//do some thing...
}
};
}
}
回撥函式中出現的匿名類:
一個函式實現相同功能但更靈活:
首先定一個回撥介面:
java 程式碼
public class TestObject {
/**
* 一個用來被測試的方法,進行了一個比較耗時的迴圈
*/
public static void testMethod(){
for ( int i= 0 ; i< 100000000 ; i++){
}
}
}
然後再寫一個工具類:
java 程式碼
public class Tools {
/**
* 測試函式使用時間,通過定義CallBack介面的execute方法
* @param callBack
*/
public void testTime(CallBack callBack) {
long begin = System.currentTimeMillis(); //測試起始時間
callBack.execute(); ///進行回撥操作
long end = System.currentTimeMillis(); //測試結束時間
System.out.println("[use time]:" + (end - begin)); //列印使用時間
}
public static void main(String[] args) {
Tools tool = new Tools();
tool.testTime(new CallBack(){
//定義execute方法
public void execute(){
//這裡可以加放一個或多個要測試執行時間的方法
TestObject.testMethod();
}
});
}
}