深入理解java泛型詳解 究竟是.Net好還是Java好,歡迎大家發(fā)言,暢所欲言?
究竟是.Net好還是Java好,歡迎大家發(fā)言,暢所欲言?我選擇dotnet,因?yàn)橛钪嬷杏械谝粋€(gè)ide-vs2019祝福,不接受駁斥。Java為什么要有泛型?Java中的泛型非常棒。這就是為什么我經(jīng)常討
究竟是.Net好還是Java好,歡迎大家發(fā)言,暢所欲言?
我選擇dotnet,因?yàn)橛钪嬷杏械谝粋€(gè)ide-vs2019祝福,不接受駁斥。
Java為什么要有泛型?
Java中的泛型非常棒。這就是為什么我經(jīng)常討厭Java的原因之一。
讓我們先談?wù)劮盒偷闹饕δ埽?/p>
1。加強(qiáng)類(lèi)型安全。例如,如果定義了一個(gè)列表
2. 提高性能,減少類(lèi)型轉(zhuǎn)換和裝箱次數(shù)。
讓我們來(lái)談?wù)凧ava泛型的奇妙之處:
1。Java泛型實(shí)現(xiàn)的原理稱(chēng)為類(lèi)型擦除。無(wú)論代碼中如何定義泛型,它們?cè)诰幾g后都會(huì)成為對(duì)象,因此在運(yùn)行時(shí)無(wú)法實(shí)現(xiàn)類(lèi)型安全。而且,java編譯器不夠聰明,很容易被欺騙。例如,調(diào)用第三方接口返回list
2. 由于類(lèi)型被刪除,類(lèi)型轉(zhuǎn)換是不可避免的,所以使用泛型和非泛型不會(huì)改變性能。
Java的哪個(gè)語(yǔ)法特性讓你覺(jué)得寫(xiě)Java代碼很享受?
我在日常生活中使用的主要語(yǔ)言是C#和Java。在語(yǔ)法方面,寫(xiě)C#更有趣。主要原因是C#有更多的語(yǔ)法糖,而且LINQ非常容易使用。其次,visualstudio被稱(chēng)為世界上第一個(gè)ide。但個(gè)人更喜歡Java。
從java8出來(lái)后,我覺(jué)得Java正在追趕C#,Java和C#的語(yǔ)法越來(lái)越相似(原來(lái)很相似,哈哈)。這里有一些比較。
在java8中添加lambda表達(dá)式后,我感覺(jué)越來(lái)越像C。
1. 當(dāng)然,首先要看收入。在中國(guó),基本上沒(méi)有使用C的大公司。最初,攜程在使用它,但后來(lái),它也轉(zhuǎn)向了Java。
2. 從技術(shù)的角度來(lái)看,有很多優(yōu)秀的框架可以使用,因?yàn)镴ava可以制造很多輪子。在實(shí)際項(xiàng)目中你遇到問(wèn)題,別人一定遇到過(guò),能找到問(wèn)題的關(guān)鍵。
3. 從生態(tài)學(xué)的角度來(lái)看,Java無(wú)疑是最好的選擇之一,因?yàn)樗拈_(kāi)源較早,建立生態(tài)學(xué)的時(shí)間也較早。
4. 在性能方面,sun/Oracle熱點(diǎn)JVM內(nèi)置的JIT編譯器在運(yùn)行時(shí)對(duì)字節(jié)碼進(jìn)行了優(yōu)化。如果它不是一個(gè)性能敏感的應(yīng)用程序,Java就足夠了。
謝謝。
java怎么獲取一個(gè)泛型方法的真實(shí)泛型類(lèi)型?
在我看來(lái),從方法內(nèi)部獲取泛型方法的真正泛型類(lèi)型是可行的,但通過(guò)方法獲取泛型方法的真正泛型類(lèi)型應(yīng)該是不可能的。
首先,Java中的泛型也稱(chēng)為參數(shù)化類(lèi)型。正確地記住,泛型應(yīng)該是jdk5引入的特性。泛型的目的是使數(shù)據(jù)類(lèi)型能夠作為參數(shù)傳入,以便可以動(dòng)態(tài)更改變量的數(shù)據(jù)類(lèi)型。
那么什么是通用方法?泛型類(lèi)型是在方法上聲明的。只有在調(diào)用方法時(shí)才會(huì)傳入實(shí)類(lèi)型。如果在方法中得到它,可以直接調(diào)用泛型對(duì)象的getClass方法。但是如果你想通過(guò)一個(gè)方法得到一個(gè)泛型方法的真正類(lèi)型,我不認(rèn)為它可以實(shí)現(xiàn)。因?yàn)椴徽{(diào)用方法時(shí),不會(huì)輸入實(shí)數(shù)據(jù)類(lèi)型,因此根本無(wú)法獲取泛型對(duì)應(yīng)的實(shí)類(lèi)型。
所以我將討論如何在泛型方法中獲得泛型的真實(shí)類(lèi)型。
舊規(guī)則,讓我們編寫(xiě)一個(gè)代碼來(lái)解釋。泛型方法的示例如下圖所示:
在上圖中,我聲明了一個(gè)泛型方法:findfirst,用于獲取數(shù)組的第一個(gè)元素。
運(yùn)行結(jié)果如下:
以上是我的答案。我希望它能幫助你