JavaSE进阶 第九章 泛型

1.注意点

结合第十一章集合的内容阅读

  • JDK5.0后推出了泛型,泛型只在编译阶段起作用,给编译器参考
  • 使用泛型的好处:集合中存储的元素类型统一了;从集合中取出的元素类型是泛型指定的类型,不需要大量的向下转型
  • 适用泛型的缺点:导致集合中的元素缺乏多样性,但是的多数业务中,集合中元素的类型还是统一的

2.泛型的使用

public class Animal{
	public void move(){
		System,out.println("动物在移动");
	}
}
class Cat extends Animal{
	public void main catchMouse(){
		System.out.println("猫抓老鼠");
	}
}
class Bird extends Animal{
	public void fly(){
		System.out.println("鸟在飞");
	}
}
public class Test{
	public static void main(String[] args){
		List<Animal> myList = new ArrayList<Animal>();
		//使用泛型List<Animal>后,表示List集合中只允许存储Animal类型的数据
		Cat c = new Cat();
		Bird b = new Bird();
		
		myList.add(a);
		myList.add(b);

		Iterator<Animal> it = myList.iterator();
		//这个表示迭代器迭代的是Animal类型的
		while(it.hasNext()){
			Animal a = it.next();
			//每一次迭代返回的数据都是Animal类型的
			//a.move();
			//调用子类特有的方法还是需要向下转型
			if(a instanceof Cat){
				Cat x = (Cat)a;
				x.catchMouse();
			}
			if(a instanceof Bird){
				Bird y = (Bird)a;
				y.fly();
			}
		}
	}
}

3.自动类型推断机制

JDK8后引入,又称为钻石表达式

public class Test{
	public static void main(String[] args){
		List<Animal> myList = new ArrayList<>();
		//ArrayList<这里的类型自动推断>
		myList.add(new Animal());
		myList.add(new Cat());
		Iterator<Animal> it = myList.iterator();
		while(it.hasNext()){
			Animal a = it.next();
			a.move();
	}	
}

4.自定义泛型

自定义泛型是,<>中的是一个标识符,可以自定义
java源代码中经常出现的是:

  • ,E是Element单词的首字母
  • ,T是Type单词的首字母
public class MyIterator<E>{
	public void doSome(E o){
		System.out.prinln(o);
	}
	public static void main(String[] args){
		MyIterator<String> m = new MyIterator<>();
		//new 对象时指定泛型为String类型
		m.doSome("abc");
		//m.oSome(100); 类型不匹配
	}
}
class MyIterator<T>{
	public T get(){
		return null;
	}
	public static void main(String[] args){
		MyIterator<String> m1 = new MyIterator<>();
		String s1 = m1.get();

		MyIterator<Animal> m2 = new MyIterator<>();
		Animal s2 = m2.get();
	}
}

传送门

上一章:JavaSE进阶 第八章 异常处理
下一章:JavaSE进阶 第十章 增强for循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值