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接口的实现类的引用调用

发布了222 篇原创文章 · 获赞 60 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42405670/article/details/103916557