泛型引數的作用是什么?直接用objet型別的引數不行嗎?
uj5u.com熱心網友回復:
使用泛型引數可以保證型別一致啊,跟你使用集合一樣,你想想使用泛型集合的好處是什么?是不是你集合指定泛型為String,存的時候只能存String,取的時候不需要強轉也是String。或者你可以舉一個接收泛型引數的方法,我看看能不能根據具體方法給你解釋。uj5u.com熱心網友回復:
直接用object型別,你還要判斷實際參考的型別是否一致,還要進行型別強行轉換等等,代碼繁瑣。比如,對比一下test1方法和test2方法
class AA extends A {
public void action() {
System.out.println("AA");
}
}
public class A {
public void action() {
System.out.println("A");
}
public static <T extends A> void test1(T t) { //T是A的子類泛型
t.action(); //代碼簡潔
}
public static void test2(Object t) { //用Object代碼繁瑣
if (t instanceof A) { //判斷型別
((A)t).action(); //強行轉換
}
}
public static void main(String[] args) {
A a = new AA();
test1(a);
test2(a);
}
}
uj5u.com熱心網友回復:
泛型其實就是讓錯誤今早在編譯期暴露的,而且泛型在運行時也是將型別擦除的,為了就是向前兼容。其實你用反射的話就可以繞開泛型的檢測,但是你在運行時就需要寫 instanceof 之類的判斷,uj5u.com熱心網友回復:
泛型引數的作用就是限制引數型別,例如public <T> void function(T t1, T t2) {
...
} 這個方法就限制了兩個引數必須是相同型別,Object 做不到這樣的限制。
uj5u.com熱心網友回復:
泛型的實質是型別檫除,在編譯期就會自動轉換為你傳入的型別,這是簡化了多載的學法,使用object是可以,但是這樣相對浪費的空間比較大uj5u.com熱心網友回復:
泛型能避免型別強轉帶來的麻煩,將運行期的ClasscastException,在編譯期就顯現出來。
Collection coll = new ArrayList();
coll.add("abc");
coll.add("itcast");
coll.add(5);//由于集合沒有做任何限定,任何型別都可以向其中存放
Iterator it = coll.iterator();
while(it.hasNext()){
//需要列印每個字串的長度,就要把迭代出來的物件轉成String型別
String str = (String) it.next();
System.out.println(str.length());
}
public static void main(String[] args) {
Collection<String> list = new ArrayList<String>();
list.add("itheima");
list.add("itcast");
// list.add(666);//當集合明確型別后,存放型別不一致就會編譯報錯
// 集合已經明確具體存放的元素型別,那么在使用迭代器的時候,迭代器也同樣會知道具體遍歷
元素型別
Iterator<String> it = list.iterator();
while(it.hasNext()){
String str = it.next();
//當使用Iterator<String>控制元素型別后,就不需要強轉了。獲取到的元素直接就是
String型別
System.out.println(str.length());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/22642.html
標籤:Java SE
上一篇:使用spring data jpa新增用戶到資料庫默認值為java資料型別的默認值
下一篇:關于演算法中的各類排序演算法
