现在的位置: 首页 > 综合 > 正文

JAVA匿名内部类的学习

2013年09月16日 ⁄ 综合 ⁄ 共 2420字 ⁄ 字号 评论关闭

网上找了很多资料,学习了一下内部类,其实也不常用,具体也没有怎么使用过,还是学习下了。

一般用在 事件处理、线程比较多

注意匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着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;
	}
	
}

暂时写到这里,以后再补。

抱歉!评论已关闭.