java --泛型

#1.为何要使用泛型?
1.解决元素存储的安全性问题。
在一个list钟,我原本只但愿存储String类型的对象,可是没有使用泛型时,Object类对象能够存储进去。这就形成list中元素类型不一致。
2.解决获取元素数据时,须要类型强转的问题。
在如上list中获取元素数据时,很明显获取String类型时,须要强转String;获取Object元素时,须要强转Object。
使用了泛型,1.就规定了list中存放元素的类型;2.取出元素时,不须要作类型转换。安全

public void testGeneric() {
		/**
		 * 不使用泛型
		 */
		List list = new ArrayList<>();
		list.add(78);
		list.add(85);
		list.add(69);
		//1.不安全元素进来了
		list.add(new String("AA"));
		for (int i = 0; i < list.size(); i++) {
			//2.强转出现问题
			int score = (int) list.get(i);
			System.out.println(score);
		}
		
		/**
		 * 使用泛型
		 */
		List<Integer> list2 = new ArrayList<>();
		list2.add(78);
		list2.add(85);
		list2.add(69);
		//不安全元素进不来
		//list2.add(new String("AA"));
		for (int i = 0; i < list2.size(); i++) {
			//2.强转出现问题
			int score = list2.get(i);
			System.out.println(score);
		}
	}

#2.自定义泛型类、泛型接口、泛型方法code

/**
 * 自定义泛型类
 * 
 */
public class Order<T> {
	
	private int orderId;
	private String orderName;
	private T t;
	private List<T> list;
	//用上面自定义的t
	public void add() {
		list.add(t);
	}
	//自定义泛型方法
	//传入什么类型元素,就输出什么类型元素
	public <E> E getE(E e) {
		return e;
	}
}

使用自定义泛型类对象

public void testGeneric() {
		Order<String> order = new Order<>();
		order.setOrderId(1001);
		order.setOrderName("张三");
		order.setT("讲故事");
		System.out.println(order);
		
		order.setList(new ArrayList<>());
		//将order.getT()的值添加到order的list属性中
		order.add();
		System.out.println(order);
		//接收数据类型必须与传入数据类型一致
		int tmp = order.getE(123);
		System.out.println(tmp);
	}

#3.通配符接口

public void testGeneric() {
		
		//这里?表明通配符
		//便可以表明任何类型
		List<?> list = null;
		List<Integer> list1 = new ArrayList<>();
		List<String> list2 = new ArrayList<>();
		list = list1;
		list = list2;
	}
相关文章
相关标签/搜索