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

Posted 维宇空灵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVASE(十五) 泛型 :泛型用例自定义泛型类通配符相关的知识,希望对你有一定的参考价值。

 

 

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(十五) 泛型 :泛型用例自定义泛型类通配符的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE 语法基础--- 泛型(基础知识问答)

javaSE 集合框架—— 泛型

Scala泛型

180530-反射获取泛型类的实际参数

java泛型——泛型类泛型方法泛型接口

JavaSE-泛型