網上找了很多資料,學習了一下內部類,其實也不常用,具體也沒有怎麼使用過,還是學習下了。
一般用在 事件處理、線程比較多
注意匿名類的聲明是在編譯時間進行的,執行個體化在運行時進行。這意味著for迴圈中的一個new語句會建立相同匿名類的幾個執行個體,而不是建立幾個不同匿名類的一個執行個體。
在使用匿名內部類時,要記住以下幾個原則:
匿名內部類不能有構造方法。
匿名內部類不能定義任何靜態成員、方法和類。
匿名內部類不能是public,protected,private,static。
只能建立匿名內部類的一個執行個體。
一個匿名內部類一定是在new的後面,用其隱含實現一個介面或實現一個類。
因匿名內部類為局部內部類,所以局部內部類的所有限制都對其生效。
內部類只能訪問外部類的靜態變數或靜態方法。
貼上點代碼,一個介面,三個類,不同的傳回值方法:
package com.other;public interface AInterface {public Object doInner();}
package com.other;public class InnerClass {public static void main(String[] args) {InnerClass ic = new InnerClass();AInterface result = ic.getInnerClass();System.out.println(result.doInner());}private AInterface getInnerClass(){return new AInterface(){public String doInner(){return "hello";}};}}
package com.other;public class InnerClassA {public static void main(String[] args) {InnerClassA ia = new InnerClassA();boolean flag = ia.getTrueOrFalse();System.out.println(flag);}private boolean getTrueOrFalse(){boolean flag = false;Object obj = new InnerClassA().excuteTF(new AInterface(){public Object doInner(){return "hello";}});flag = (Boolean)obj;return flag;}private Object excuteTF(Object obj){AInterface ic = (AInterface)obj;String temp = (String)ic.doInner();if(temp.equals("hello")){return true;}else{return false;}}}
package com.other;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class InnerClassB {public static void main(String[] args) {InnerClassB ia = new InnerClassB();List<Map<String,Object>> list = ia.getList();for (int i = 0; i < list.size(); i++) {Map<String, Object> map = (Map<String, Object>)list.get(i);System.out.println("城市區號:" + map.get("IDNO") + "--城市名稱:" + map.get("DESC"));}}private List<Map<String,Object>> getList(){return new InnerClassB().excuteList(new AInterface(){public Object doInner(){List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();Map<String, Object> map1 = new HashMap<String, Object>();map1.put("IDNO", "010");map1.put("DESC", "北京");Map<String, Object> map2 = new HashMap<String, Object>();map2.put("IDNO", "021");map2.put("DESC", "上海");Map<String, Object> map3 = new HashMap<String, Object>();map3.put("IDNO", "022");map3.put("DESC", "天津");Map<String, Object> map4 = new HashMap<String, Object>();map4.put("IDNO", "023");map4.put("DESC", "重慶");list.add(map1);list.add(map2);list.add(map3);list.add(map4);return list;}});}@SuppressWarnings("unchecked")private List<Map<String,Object>> excuteList(Object obj){AInterface ic = (AInterface)obj;List<Map<String,Object>> list = (List<Map<String, Object>>)ic.doInner();return list;}}
暫時寫到這裡,以後再補。