Java泛型中的字母表示

常用的泛型表示字母

常用的泛型字母表示有?, TK, V, E

?表示不确定的Java类型
T取词为 type, 表示一种具体的Java类型
K取词为key, 表示Java键值对中的键
V取词为value, 表示Java键值对中的值
E取词为element, 表示元素

?和T在类型表示上的区别

?表示的泛型参数不一定, 即表示的类型不一定是相同的

例如:

public int MyList(List <? extends Number> dest, List<? extends Number> src)

在上面的函数中, 就不能保证两个List具有相同类型的参数

无界通配符

<?>

对于不关心实际操作的或者不确定的类型, 可以直接使用一个, 表示其可以持有任何类型

上界通配符

<? extends E>

extends表示?的类型只能是E或者E的子类, 如果不是会报错

下届通配符

<? super E>

super表示?的类型可以是E或者E的父类, 最高到Object

T确保泛型参数是一定的, 即表示的类型是相同的

例如

public <T extends Number> MyList(List <T> dest, List <T> src)

demo

下面是例子

public class FanXing {
 
    TestA a = new TestA("13");
    TestA b = new TestA(123);
 
    public void getClass1(TestA<?> test) {
 
    }
    //报错
    public void getClass2(TestA<T> test) {
 
    }
}
 
class TestA<T> {
    private T t;
 
    public TestA(T key) {
        this.t = key;
    }
}

在使用泛型作为方法的参数时 就需要使用泛型通配符来解除传入参数的类型,类型参数就做不到

与<字母>的还有一个区别就在于 字母形参可以在之后的函数调用 T t= it.next();
public static void printColl(ArrayList<T> al){
        Iterator<T> it = al.iterator();
        while(it.hasNext())
        {
            T t = it.next();
            System.out.println(t.toString());
        }
}

你可能感兴趣的:(java,java,开发语言,jvm)