探究使用泛型的上限

没使用泛型前将导致的问题代码:

package en.iteast.generic.demo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.TreeSet;

import en.iteast.generic.domain.Student;

public class GenericDemo9 {
	private void mian() {
		Collection coll = new ArrayList();
		coll.add("lixinting");
		coll.add("lidanni");
		coll.add("zhudanni");
		
		TreeSet ts = new TreeSet(coll);
		ts.add(88);
		/**
		 * 1.
		 * 这将导致一个问题:
		 *TreeSet集合中,前3个是字符串,后一个是Integer,这将导致将TreeSet容器中的
		 * 元素遍历出来会报错。
		 * 解决:
		 * 通过设置泛型上限,使得遍历时的范围变广。
		 * 
		 */
	
		for (Object object : ts) {
			
			System.out.println(object);
		}
	}	
}

class MyTreeSet{
	public MyTreeSet() {	
	}
	public MyTreeSet(Collection c) {
		
	}
}

使用泛型改进后的代码:

package en.iteast.generic.demo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.TreeSet;

import en.iteast.generic.domain.Person;
import en.iteast.generic.domain.Student;

public class GenericDemo10 {
	/**
	 * 泛型上限实操,可见API文档
	 * java.util.TreeSet类中TreeSet(Collection<? extends E> c) 
	 * 一般往集合中存储元素时,如果集合中定义了E类型,通常情况下应该存储E类型的对象。
	 * 对于E的子类型的对象E类型也可以接受。所以这时可以将泛型从E改为---<? extends E>--- c。
	 */
	public static void mian(String[] args) {
		Collection<Student> coll = new ArrayList<Student>();
		coll.add(new Student(21,"zhang3"));
		coll.add(new Student(22,"lki4"));
		coll.add(new Student(24,"LiXinTing"));
		
		TreeSet ts = new TreeSet(coll);
		ts.add(new Person(21,"zhang3"));
	
		for (Iterator<Person> iterator = ts.iterator(); iterator.hasNext();) {
			Person object = iterator.next();
			System.out.println(object);
		}
	}
	
	
}

//与TreeSet类似的类设计:
class MyTreeSet<E>{
	public MyTreeSet() {
		
	}
	public MyTreeSet(Collection<? extends E> c) {
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值