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泛型学习笔记 - 有界类型参数

如何理解 Java 中的 lt;T extends Comparable<

Java 泛型 lt;super T>中 super 怎么 理解?与 extends 有何不同

Java泛型的应用——T extends Comparable<? super T;

Java 泛型泛型用法 ( 泛型编译期擦除 | 上界通配符 <? extends T> | 下界通配符 <? super T> )

<T extends A<T>> 和继承形式的 Java 泛型