版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
泛型限定概述
在Java泛型限定中,常常存在以下三种方式:
<? extends E >
表示向下限定,即泛型类型为E及其子类
<? super E>
表示向上限定,即泛型类型为E及其父类
<?>
表示任意类型,即泛型类型为任意类型
泛型限定示例
在该示例中存在三个类。其中,Animal为父类,Dog和Cat为Animal的子类。
Animal
Cat
Dog
测试
源码
package com.cn;
import java.util.ArrayList;
import java.util.Collection;
/**
* 本文作者:谷哥的小弟
* 博客地址:http://blog.csdn.net/lfdfhl
*/
public class Test {
@SuppressWarnings("unused")
public static void main(String[] args) {
ArrayList<Object> objectList = new ArrayList<Object>();
ArrayList<Animal> animalList = new ArrayList<Animal>();
ArrayList<Dog> dogList = new ArrayList<Dog>();
ArrayList<Cat> catList = new ArrayList<Cat>();
System.out.println("--------test1--------");
// This is right code
test1(animalList);
test1(dogList);
test1(catList);
// This is wrong code
// test1(objectList);
System.out.println("--------test2--------");
// This is right code
test2(animalList);
test2(objectList);
// This is wrong code
//test2(dogList);
//test2(catList);
System.out.println("--------test3--------");
// This is wrong code
test3(objectList);
test3(animalList);
test3(dogList);
test3(catList);
}
// 规定形参list必须是:泛型为Animal或其子类的集合
public static void test1(Collection<? extends Animal> list) {
}
// 规定形参list必须是:泛型为Animal或其父类的集合
public static void test2(Collection<? super Animal> list) {
}
// 规定形参list必须是:泛型为任意类型的集合
public static void test3(Collection<?> list) {
}
}