JAVA泛型<T>的使用,<? extends E>和<? super E>的含义
Posted 小乖乖的臭坏坏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA泛型<T>的使用,<? extends E>和<? super E>的含义相关的知识,希望对你有一定的参考价值。
JAVA泛型<T>的使用
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,定义泛型来完成扩展。
class Demo<T>
public void show(T t)
System.out.println("show:"+t);
public <Q> void print(Q q)
System.out.println("print:"+q);
public static <W> void method(W t)
System.out.println("method:"+t);
定义在接口上的泛型
interface Inter<T>
void show(T t);
class InterImpl<T> implements Inter<T>
public void show(T t)
System.out.println("show :"+t);
class GenericDemo5
public static void main(String[] args)
InterImpl<Integer> i = new InterImpl<Integer>();
i.show(4);
<? extends E>和<? super E>的含义
? 称为通配符。也可以理解为占位符。
泛型的限定;
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限
import java.util.*;
class GenericDemo6
public static void main(String[] args)
ArrayList<Person> al = new ArrayList<Person>();
al.add(new Person("abc1"));
al.add(new Person("abc2"));
al.add(new Person("abc3"));
//printColl(al);
ArrayList<Student> al1 = new ArrayList<Student>();
al1.add(new Student("abc--1"));
al1.add(new Student("abc--2"));
al1.add(new Student("abc--3"));
printColl(al1); //ArrayList<? extends Person> al = new ArrayList<Student>();error
public static void printColl(Collection<? extends Person> al)
Iterator<? extends Person> it = al.iterator();
while(it.hasNext())
System.out.println(it.next().getName());
class Person
private String name;
Person(String name)
this.name = name;
public String getName()
return name;
class Student extends Person
Student(String name)
super(name);
class Comp implements Comparator<Person>
public int compare(Person s1,Person s2)
//Person s1 = new Student("abc1");
return s1.getName().compareTo(s2.getName());
TreeSet<Student> ts = new TreeSet<Student>(new Comp());
ts.add(new Student("abc1"));
ts.add(new Student("abc2"));
ts.add(new Student("abc3"));
以上是关于JAVA泛型<T>的使用,<? extends E>和<? super E>的含义的主要内容,如果未能解决你的问题,请参考以下文章
如何理解 Java 中的 lt;T extends Comparable<
Java 泛型 lt;super T>中 super 怎么 理解?与 extends 有何不同
Java泛型的应用——T extends Comparable<? super T;
Java 泛型泛型用法 ( 泛型编译期擦除 | 上界通配符 <? extends T> | 下界通配符 <? super T> )