泛型是否可以放其他類型
不知道大家對於java泛型是怎麼理解的?
大家認為泛型到底有什麼作用了?
泛型只能存放指定類型的數據,底層對此進行了處理,我們只能對存取指定類型的數據
很多人一定是這麼理解的吧,但實際上並不是哦,泛型只是為了規範在編譯的時候對泛型做了判斷,為了方便我們存取,減少編程錯誤,其實底層編譯成位元組碼的時候並沒有任何泛型,和jdk1.5之前其實是沒區別的,如果我們繞開編譯,那完全可以存放其他類型的數據
如何繞開,我們可以利用反射,大家看看下面的代碼
package a;
import java.util.ArrayList;
import java.util.List;
public class A {
public A(String s) {
slist.add(s);
}
private List
public List
return slist;
}
public void setSlist(List
this.slist = slist;
}
}
首先我們定義了這麼一個類,裡面有一個帶著泛型的list
然後
package a;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.List;
public class B {
public static void main(String[] args) throws Exception {
A a1 = new A("測試數據");
Class clazz =Class.forName("a.A");
Method m =clazz.getMethod("getSlist", null);
List la = (List) m.invoke(a1, null);
la.add(new ben);
List la1=(List) m.invoke(a1, null);
System.out.println(la1);
}
}
class ben{
int i=1;
String s="4";
@Override
public String toString {
return "ben [i=" + i + ", s=" + s + "]";
}
}
大家覺得最後列印的結果是什麼呢
[測試數據, ben [i=1, s=4]]
結果是這樣的,你沒看錯,我在泛型為String的集合裡面放了一個自定義的類,如果泛型的編譯的時候真的做了處理,那麼在la.add(new ben);這一句的時候應該拋出類型轉換異常
怎麼樣,是不是大吃一驚,發現和自己知道的完全不一樣?(大神請無視)


※js中的數組對象排序(方法sort()詳細介紹)
※thinkphp5.0學習筆記(四)資料庫的操作
※簡訊發送介面被惡意訪問的網路攻擊事件(三)定位惡意IP的日誌分析腳本
※Akka(8): 分布式運算:Remoting-遠程查找式
※CNN壓縮:為反向傳播添加mask
TAG:達人科技 |
※你的顏值是否會毀於髮型
※目前人類的力量是否可以戰勝怪獸?
※創意繪畫——如此簡單粗暴型,是否咱也可以?
※含羞草是否有毒,是否可以放在室內?
※直腸癌容易盯上4類人 速看 你是否也是其中之一
※這4個引導方式是否用對,決定了你的作品是不是足夠的吸引人
※如果可以交換命運,你是否仍然選擇做自己
※你是否屬於易抑鬱的那類人
※型男平頭髮型有幾種 這些你是否都嘗試過
※妊娠期梅毒是否可以順產,產後是否可以哺乳
※怎樣可以判斷自己是否有膽囊癌?
※孕婦是否可以放心化妝的7個真相
※算命大師的八種類型,看你是否在其中
※超巨型生物是否存在?科學可以給你解釋
※你是否還需要更多的選擇,讓自己變得更可愛
※問男人這四個問題,可以知道他對你是否真心
※你的便便透露你是否健康是否可以減肥
※男人是否真心愛你,從他吻你的類型就能看出,第3種是真的愛你!
※挽回他的同時,請注意他是否具備這樣的能力
※做自己動手是否可以把毛衣改時尚背心?