深入理解java泛型詳解 究竟是.Net好還是Java好,歡迎大家發(fā)言,暢所欲言?
究竟是.Net好還是Java好,歡迎大家發(fā)言,暢所欲言?我選dotNet,因?yàn)橛杏钪娴谝籭de——vs2019 加持,不接受反駁。Java為什么要有泛型?java里的泛型是奇葩的存在。這也是我經(jīng)常懟j
究竟是.Net好還是Java好,歡迎大家發(fā)言,暢所欲言?
我選dotNet,因?yàn)橛杏钪娴谝籭de——vs2019 加持,不接受反駁。
Java為什么要有泛型?
java里的泛型是奇葩的存在。這也是我經(jīng)常懟java的一個(gè)原因。
先說(shuō)下泛型的主要作用:
1,強(qiáng)化類型安全,比如定義了一個(gè)List<String>,那么里面只能存放String,不允許存放其他類型(派生自String的除外)。類型安全應(yīng)該在編譯和運(yùn)行時(shí)都能體現(xiàn)。
2,提高性能,減少類型轉(zhuǎn)換和裝箱拆箱次數(shù)。
再說(shuō)下java泛型奇葩之處:
1,java泛型實(shí)現(xiàn)的原理叫類型擦除,不管代碼中怎么定義泛型,編譯后都變成object, 因此不能實(shí)現(xiàn)運(yùn)行時(shí)的類型安全。 而且java編譯器不夠聰明,可以很容易騙過(guò)去。 舉個(gè)例子,你調(diào)用了第三方的接口返回List<String>,但實(shí)際拿到的值里面可能跟String沒(méi)有半毛錢(qián)關(guān)系。
2,既然類型被擦除,那么類型轉(zhuǎn)換就不可避免了,因此使用泛型和非泛型在性能上沒(méi)有任何變化。