码迷,mamicode.com
首页 > 编程语言 > 详细

JAVASE(十五) 泛型 :泛型用例、自定义泛型类、通配符

时间:2020-02-04 15:43:43      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:ack   bsp   col   filter   test   lte   blog   允许   alt   

 

 

1、泛型在集合中的使用

1.1 在集合中使用泛型之前的例子

      技术图片技术图片?

为什么要有泛型(Generic)?

1. 解决元素存储的安全性问题
2. 解决获取数据元素时,需要类型强转的问题

技术图片技术图片?

技术图片技术图片?

1.2 在集合中使用泛型例子1

        List<String> list = new ArrayList<String>();
		list.add("aaaa");
		List<Integer> list2 = new ArrayList<Integer>();
		list2.add(1111);
技术图片

1.3 在集合中使用泛型例子2

        Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("aaa", 20);
技术图片

体会:使用泛型的主要优点是能够在编译时而不是在运行时检测错误。

2、自定义泛型类,泛型接口,泛型方法

2.1 自定义泛型类

public class Women<T> {
    T t;
}
技术图片

思考?如何让子类指明父类的泛型类型
当子类继承父类时,可以直接指明父类的泛型类型,那么子类就不用再声明泛型的类型了

public class Women extends Creature<String> {}
技术图片

当子类继承父类时,不直接指明父类的泛型类型,那么子类就必须声明泛型的类型

public class Women<T> extends Creature<T> {}
技术图片

2.2  自定义泛型接口

public interface Buy<T> {
    public void setT(T t);
}
技术图片

2.3  自定义泛型方法

public <E> E setE(E e){
	return e;
}
技术图片

说明:泛型方法可以使用static修饰

3、 泛型与继承

    技术图片技术图片?

示例:

public void testGenericAndSubClass() {
	Person[] persons = null;
	Man[] mans = null;
	// 而 Person[] 是 Man[] 的父类.
	persons = mans;

	Person p = mans[0];

	// 在泛型的集合上
	List<Person> personList = null;
	List<Man> manList = null;
	// personList = manList;(报错)
}
技术图片

4、 通配符 - ?

4.1通配符的使用说明:

说明:        <?>是所有泛型类型的父类
读取数据:使用通配符泛型的集合能读取数据。
存数据 :   只能存储null

4.2  通配符的限制说明:

<? extends Number>     (无穷小 , Number]
技术图片

只允许泛型为Number及Number子类的引用调用

<? super Number>      [Number , 无穷大)
技术图片

只允许泛型为Number及Number父类的引用调用

<? extends Comparable>
技术图片

只允许泛型为实现Comparable接口的实现类的引用调用

JAVASE(十五) 泛型 :泛型用例、自定义泛型类、通配符

标签:ack   bsp   col   filter   test   lte   blog   允许   alt   

原文地址:https://www.cnblogs.com/wushaopei/p/12259540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!