網(wǎng)站做的好的公司搜索引擎排名競(jìng)價(jià)
Java 泛型(generics)是 JDK 5 中引入的一個(gè)新特性, 泛型提供了編譯時(shí)類型安全檢測(cè)機(jī)制,該機(jī)制允許程序員在編譯時(shí)檢測(cè)到非法的類型。泛型的本質(zhì)是參數(shù)化類型,也就是說(shuō)所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。
Java 的泛型是偽泛型,這是因?yàn)?Java 在編譯期間,所有的泛型信息都會(huì)被擦掉,這也就是通常所說(shuō)類型擦除 。 更多關(guān)于類型擦除的問(wèn)題,可以查看這篇文章:《Java 泛型類型擦除以及類型擦除帶來(lái)的問(wèn)題》 。
List<Integer> list = new ArrayList<>();list.add(12);
//這里直接添加會(huì)報(bào)錯(cuò)
list.add("a");
Class<? extends List> clazz = list.getClass();
Method add = clazz.getDeclaredMethod("add", Object.class);
//但是通過(guò)反射添加,是可以的
add.invoke(list, "kl");System.out.println(list)
泛型一般有三種使用方式:泛型類、泛型接口、泛型方法。
1.泛型類:
//此處T可以隨便寫(xiě)為任意標(biāo)識(shí),常見(jiàn)的如T、E、K、V等形式的參數(shù)常用于表示泛型
//在實(shí)例化泛型類時(shí),必須指定T的具體類型
public class Generic<T>{private T key;public Generic(T key) {this.key = key;}public T getKey(){return key;}
}
如何實(shí)例化泛型類:
Generic<Integer> genericInteger = new Generic<Integer>(123456);
public interface Generator<T> {public T method();
}
實(shí)現(xiàn)泛型接口,不指定類型:
class GeneratorImpl<T> implements Generator<T>{@Overridepublic T method() {return null;}
}
實(shí)現(xiàn)泛型接口,指定類型:
class GeneratorImpl<T> implements Generator<String>{@Overridepublic String method() {return "hello";}
}
3.泛型方法 :
public static < E > void printArray( E[] inputArray ){for ( E element : inputArray ){System.out.printf( "%s ", element );}System.out.println();}
使用:
// 創(chuàng)建不同類型數(shù)組: Integer, Double 和 Character
Integer[] intArray = { 1, 2, 3 };
String[] stringArray = { "Hello", "World" };
printArray( intArray );
printArray( stringArray );
常用的通配符為: T,E,K,V,?
- ? 表示不確定的 java 類型
- T (type) 表示具體的一個(gè) java 類型
- K V (key value) 分別代表 java 鍵值中的 Key Value
- E (element) 代表 Element
更多關(guān)于 Java 泛型中的通配符可以查看這篇文章:《聊一聊-JAVA 泛型中的通配符 T,E,K,V,?》
更多內(nèi)容請(qǐng)關(guān)注我的專欄