黑马程序员——泛型限定,上限,下限

                                          ----------------------     android培训      java培训   期待与您交流!    ----------------------   
                 

package collection.fanxing;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
/**
 * ? 通配符,也可以理解为占位符
 * 泛型的限定:
 * ? extends E :可以接受E类型或者E的子类型,上限
 * ? super E   :可以接受E类型或者E的父类型,下限
 * @author wjw
 *
 */
public class FanXing_XianDing {
	public static void main(String[] args) {
		ArrayList<String> list =new ArrayList<String>();
		list.add("fda");
		list.add("reqw");
		list.add("hfds");
		ArrayList<Integer> inte=new ArrayList<Integer>();
		inte.add(23);
		inte.add(423);
		inte.add(675);
		//测试泛型
		print(list);
		print(inte);
		System.out.println("-----------------------------------------");
		//测试通配符
		show(list);
		show(inte);
		System.out.println("-----------------------------------------");
		ArrayList<Person_> ap=new ArrayList<Person_>();
		ap.add(new Person_("abc1"));
		ap.add(new Person_("abc2"));
		ap.add(new Person_("abc3"));
		//bianLi(ap); 
		ArrayList<Student_> app=new ArrayList<Student_>();
		app.add(new Student_("stu1"));
		app.add(new Student_("stu2"));
		app.add(new Student_("stu3"));
		bianLi(app);
		System.out.println("-----------------以下是下限的测试----------------------------");
		TreeSet<Student_> stu_ts=new TreeSet<Student_>(new Comp());
		stu_ts.add(new Student_("stu1"));
		stu_ts.add(new Student_("stu2"));
		stu_ts.add(new Student_("stu3"));
		stu_ts.add(new Student_("stu4"));
		stu_ts.add(new Student_("stu5"));
		Iterator<Student_> iter=stu_ts.iterator();
		while(iter.hasNext()){
			System.out.println(iter.next().getName());
		}
		
		TreeSet<Work> w_ts=new TreeSet<Work>(new Comp());
		w_ts.add(new Work("work1"));
		w_ts.add(new Work("work2"));
		w_ts.add(new Work("work3"));
		w_ts.add(new Work("work4"));
		w_ts.add(new Work("work5"));
		Iterator<Work> w_iter=w_ts.iterator();
		while(w_iter.hasNext()){
			System.out.println(w_iter.next().getName());
		}
	}
	//遍历自定义对象集合,单独列出方法
	//泛型限定,<? extends Person_>:这种格式,泛型限定在Person_类以及继承他的子类,其他类不可用
	public static void bianLi(ArrayList<? extends Person_> list){
		Iterator<? extends Person_> iter=list.iterator();
		while(iter.hasNext()){
			System.out.println(iter.next().getName());
		}
	}
	
	
	//第一定义泛型方法
	public static <T> void print(ArrayList<T> list){
		Iterator<T> iter=list.iterator();
		while(iter.hasNext()){
			//T t=iter.next();//此可操作,注意啊啊
			System.out.println(iter.next());
		}
	}
	//第二:定义通配符,进行占位
	public static void show(ArrayList<?> list){
		Iterator<?> iter=list.iterator();
		while(iter.hasNext()){
			System.out.println(iter.next());
		}
	}
}
class Comp implements Comparator<Person_>{//注意,这里就用了“  ? super E  ”
	public int compare(Person_ p1,Person_ p2){
		return p1.getName().compareTo(p2.getName());
	}
}
class Person_{
	private String name;
	public Person_(String name){
		this.name=name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
class Student_ extends Person_{
	public Student_(String name) {
		super(name);
	}
}
class Work extends Person_{
	public Work(String name){
		super(name);
	}
}

                                          ----------------------     android培训      java培训   期待与您交流!    ----------------------   
                         详细请查看       http://edu.youkuaiyun.com/heima


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

King·Forward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值