网上找了很多资料,学习了一下内部类,其实也不常用,具体也没有怎么使用过,还是学习下了。
一般用在 事件处理、线程比较多
注意匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着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; } }
暂时写到这里,以后再补。