㈠ 你真的了解java中的泛型E、T、K、V嗎
Java 泛型(generics)是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許開發者在編譯時檢測到非法的類型。泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。
但是如果換成其他的字母代替 T ,在可讀性上可能會弱一些。通常情況下,T,E,K,V,?是這樣約定的:?表示不確定的 java 類型。T (type) 表示具體的一個java類型。K V (key value) 分別代表java鍵值中的Key Value。E (element) 代表Element。
㈡ java泛型<T>和<Object>的區別
使用<T>來聲明類型持有者名稱,自定義泛型類時,類持有者名稱可以使用T(Type),如果是容器的元素可以使用E(Element),若鍵值匹配可以用K(Key)和V(Value)等,若是<?>,則是默認是允許Object及其下的子類,也就是java的所有對象了。
㈢ java <T>T鍜孴鐨勫尯鍒
鍦ㄤ綘榪欐典唬鐮侀噷闈㈡槸娌℃湁鍖哄埆鐨勶紝瀹為檯涓婂傛灉鏄<T>鐨勮瘽錛屾槸鍙浠ヤ紶鍙傛暟class鐨勶紝涔熷氨鏄璇達紝濡傛灉璇翠綘澹版槑Test<T>鐨勫硅薄鐨勬椂鍊檊etT2鐨勮繑鍥炵被鍨嬪氨宸茬粡紜瀹氫簡錛屼絾鏄痝etT3鐨勮繑鍥炲肩殑綾誨瀷鍗村彲浠ユ槸浣犱紶榪涙潵鐨勫弬鏁癱lass鐨勭被鍨嬶紝涔熷氨鏄璇磋繖涓鏂規硶鐨勮繑鍥炲肩殑綾誨瀷鍙浠ュ湪浣犺皟鐢ㄦ柟娉曟椂鍊欒繘琛岃懼畾
㈣ java 泛型中 T 和 問號的區別
在Java泛型中"T"表示自定義泛型,"?"表示通配符泛型,他們之間的區別如下
1.在整個類中只有一處使用了泛型,使用時注意加了泛型了參數不能調用與參數類型有關的方法比如「+」,比如列印出任意參數化類型集合中的所有內容,就適合用通配符泛型<?>
public static void printCollecton(Collection <?> collection)
{
for(Object obj: collection)
{
System.out.println(obj);
}
}
2.當一個類型變臉用來表達兩個參數之間或者參數與返回值之間的關系時,即統一各類型變數在方法簽名的兩處被使用,或者類型變數在方法體代碼中也被使用而不僅僅在簽名的時候使用,這是應該用自定義泛型<T>。泛型方可以調用一些時間類型的方法。比如集合的add方法。
public static <T> T autoConvertType(T obj)
{
return(T)obj;
}
㈤ java鐨勬硾鍨嬫槸浠涔堬紵
JAVA 涓<t>鏄娉涘瀷鐨勬剰鎬
鎰忔濇槸Tree榪欎釜綾婚噷闈㈤渶瑕佺敤鍒板彟澶栦竴涓綾伙紝浣嗘槸鍙堜笉鑳界『瀹氳佺敤鍒扮殑閭d釜綾葷殑鍏蜂綋綾誨瀷錛屾墍浠ユ殏鏃剁敤T鏉ヤ唬鏇匡紝褰撳叿浣撶殑紼嬪簭鐭ラ亾瑕佺敤鍒扮殑閭d釜綾誨瀷鏄浠涔堢殑鏃跺欏氨鐢ㄩ偅涓綾誨瀷鏉ヤ唬鏇縏錛屽氨ok浜嗐備緥濡傛垜闇瑕佸疄渚嬪寲涓涓猅ree綾伙紝闇瑕佺敤鍒扮殑閭d釜綾繪槸String錛岄偅涔堟垜灝卞彲浠ヨ繖涔堟潵瀹炰緥鍖朤ree<String>()銆
絎涓鏄娉涘寲銆傚彲浠ョ敤T浠h〃浠繪剰綾誨瀷Java璇璦涓寮曞叆娉涘瀷鏄涓涓杈冨ぇ鐨勫姛鑳藉炲己涓嶄粎璇璦銆佺被鍨嬬郴緇熷拰緙栬瘧鍣ㄦ湁浜嗚緝澶х殑鍙樺寲錛屼互鏀鎸佹硾鍨嬶紝鑰屼笖綾誨簱涔熻繘琛屼簡澶х炕淇錛屾墍浠ヨ稿氶噸瑕佺殑綾伙紝姣斿傞泦鍚堟嗘灦錛岄兘宸茬粡鎴愪負娉涘瀷鍖栫殑浜嗭紝榪欏甫鏉ヤ簡寰堝氬ソ澶勩
絎浜屾槸綾誨瀷瀹夊叏銆傛硾鍨嬬殑涓涓涓昏佺洰鏍囧氨鏄鎻愰珮ava紼嬪簭鐨勭被鍨嬪畨鍏錛屼嬌鐢ㄦ硾鍨嬪彲浠ヤ嬌緙栬瘧鍣ㄧ煡閬撳彉閲忕殑綾誨瀷闄愬埗錛岃繘鑰屽彲浠ュ湪鏇撮珮紼嬪害涓婇獙璇佺被鍨嬪亣璁俱傚傛灉涓嶇敤娉涘瀷錛屽垯蹇呴』浣跨敤寮哄埗綾誨瀷杞鎹錛岃屽己鍒剁被鍨嬭漿鎹涓嶅畨鍏錛屽湪榪愯屾湡鍙鑳藉彂鐢烠lassCast Exception寮傚父錛屽傛灉浣跨敤娉涘瀷錛屽垯浼氬湪緙栬瘧鏈熷氨鑳藉彂鐜拌ラ敊璇銆
絎涓夋槸娑堥櫎寮哄埗綾誨瀷杞鎹銆傛硾鍨嬪彲浠ユ秷闄ゆ簮浠g爜涓鐨勮稿氬己鍒剁被鍨嬭漿鎹錛岃繖鏍峰彲浠ヤ嬌浠g爜鏇村姞鍙璇伙紝騫跺噺灝戝嚭閿欑殑鏈轟細銆
絎鍥涙槸鍚戝悗鍏煎廣傛敮鎸佹硾鍨嬬殑Java緙栬瘧鍣錛堜緥濡侸DK1.5涓鐨凧avac錛夊彲浠ョ敤鏉ョ紪璇戠粡榪囨硾鍨嬫墿鍏呯殑Java紼嬪簭錛圙enerics Java紼嬪簭錛夛紝浣嗘槸鐜版湁鐨勬病鏈変嬌鐢ㄦ硾鍨嬫墿鍏呯殑Java紼嬪簭浠嶇劧鍙浠ョ敤榪欎簺緙栬瘧鍣ㄦ潵緙栬瘧銆
鍙傝冭祫鏂欐潵婧愶細鐧懼害鐧劇-java娉涘瀷