package com.inspur.iaisnacos; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class Generics{ public static void main(String[] args) { } private void specifyType(){ GenericsTest1 genericsTest1 = new GenericsTest1<>(); genericsTest1.set("test"); String s = genericsTest1.get(); System.out.println(s); } private void noSpecifyType(){ GenericsTest1 genericsTest1 = new GenericsTest1<>(); genericsTest1.set("test"); Object o = genericsTest1.get(); System.out.println(String.valueOf(o)); } } class GenericsTest1 { private T value; protected T get( ){ return value; } protected void set(T key){ this.value = key; } } class GenericsTest2{ private void get1(List extends Map> key){ return; } protected void get2(List key){ return ; } // 通过 T 来 确保 泛型参数的一致性 public void get3(List dest, List src){ } //通配符是 不确定的,所以这个方法不能保证两个 List 具有相同的元素类型 public void get4(List extends Map> dest, List extends Number> src){ } public void get5(List dest, List src){ } public void get6(List super Map> key){ } } class GenericsTest3{ public static T getClass(Class className) throws IllegalAccessException, InstantiationException { return className.newInstance(); } public static void main(String[] args) throws InstantiationException, IllegalAccessException { GenericsTest1 aClass = getClass(GenericsTest1.class); } //Class> 它是个通配泛型,? 可以代表任何类型,所以主要用于声明时的限制情况。而Class 则不可以这么使用 public Class> clazz; } //总结,字母T在使用上需要先确定类型,而?则不需要
参照资料:
聊一聊-JAVA 泛型中的通配符 T,E,K,V,?



