日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 接口 私有_Java 9:好的,坏的和私有的接口方法

發(fā)布時間:2023/12/3 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 接口 私有_Java 9:好的,坏的和私有的接口方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java 接口 私有

Java 9 是在幾周前發(fā)布的。 查看發(fā)行說明 ,其中包含許多有趣的功能。 不過,我覺得并非一切都是不如Oracle和Java行家似乎圖片吧 。 我看到了Java世界中的三個趨勢,分別是好,壞和丑陋。 讓我們從好的開始。

Birdman(2014),作者:Alejandro G.I?árritu

該平臺

第一個趨勢是對平臺的明顯改進,該平臺可編譯Java,打包JAR和運行字節(jié)碼。 每個Java新發(fā)行版肯定會變得更好。 以下是Java 9所做的改進,毫無疑問,它們非常有用:

  • JSR 376 :模塊系統(tǒng)又名拼圖
  • JEP 222 : jshell
  • JEP 238 :多發(fā)行版JAR
  • JEP 282 : jlink
  • JEP 158 :統(tǒng)一日志記錄

該平臺顯然正在變得更加成熟。 這是一個趨勢。

JDK

自Java 6以來我觀察到的第二個趨勢表明,JDK本質上??是由Oracle設計,開發(fā)和維護的類和接口的集合,每發(fā)布一個新版本,JDK就會變得更大。 在Java 9中,他們添加并擴展了以下內容:

  • JEP 221 , 224 225 , 261 :的Javadoc處理(擴展)
  • JEP 268 :XML目錄(新)
  • JEP 262 :TIFF映像I / O(新)
  • JEP 251 :多分辨率圖像(新)
  • JEP 110 :HTTP 2.0客戶端(新)
  • JEP 236 :Nashorn解析器(擴展)

當然,某些功能必須在JDK本身中實現,例如Unicode支持( JEP 267 ),特定于平臺的桌面功能( JEP 272 ),Spin-Wait提示( JEP 285 ),緊湊字符串( JEP 254 )和流程API。 ( JEP 102 )。 它們的實現取決于基礎平臺,并且必須與JVM一起提供。

但是,在JDK中HTTP 2.0客戶端與JAX-RS , JPA , JAX-WS , JDBC以及我認為應該遠離Oracle的許多其他事情一起在做什么? 它們不是特定于平臺的,可以由開源社區(qū)以更好的方式將它們設計為獨立的軟件包。 我認為,將它們匯總在一個巨型保護傘品牌下是一個錯誤。

我認為,大公司只是在扼殺軟件市場,而沒有使它變得更好,這是因為它們暴露于其財務和政治動機。 這正是JDK發(fā)生的事情。 由于Oracle的壟斷,它缺乏增長的靈活性和動態(tài)性。 換句話說,我們對Oracle及其大朋友認為正確的事情一無所知。

因此,使JDK更大是一個趨勢。 相反,我相信,Oracle只會從縮小規(guī)模中受益,將所有非特定于平臺的內容委派給開源社區(qū),以某種方式支持程序員,并促進市場上開放有效的標準化流程。

語言

Java由James Gosling在1995年于Sun Microsystems中開發(fā),是一種面向對象的語言。 關于這種面向對象的主張引起了很多關注 ,我也不確定Java是否比過程更面向對象。 但是,它是官方的面向對象的。

從Java的第一個版本開始,Java就從C / C ++繼承了許多程序特性,包括靜態(tài)方法 , NULL , 實現繼承等。據我所知,它不是一種完美的面向對象語言,也不會成為一種語言。它。 關鍵思想是創(chuàng)建可以一次編寫并可以在任何地方運行的東西。 但是,該語言也很重要,而不僅僅是JVM。 簡單而性感。

Java 5在2004年向前邁出了重要的一步,并通過添加泛型 ,for-each循環(huán), varargs和靜態(tài)導入對語言進行了改進。 但是,引入了注釋和枚舉,這有助于該語言從對象范式轉移到完全不同的過程。

Java 7在2011年添加了try-with-resource ,這是一個很好的舉措,與OOP范例保持一致。

Java 8在2014年添加了lambda表達式 ,這是一個很棒的功能,但與OOP絕對無關。 Lambda和Streams API將Java變成了對象,過程和功能范例的混合體。 默認方法也添加到接口中,從而將類型轉換為代碼庫。 輸入庫! 如果您問我,它甚至比實現繼承更糟糕。

現在,Java 9對接口進行了下一個“改進”,使它們可以使用私有方法。 類型中的私有靜態(tài)方法! 你相信嗎? 下一步將是什么? 我猜是Java 10中的屬性。

另外,讓我們看一下對JDK中的某些核心類所做的操作,以了解該語言的發(fā)展方向。 僅舉兩個例子。

收集的工廠方法 ( JEP 269 )。 而不是引入新的構造函數并允許我們這樣做:

List<Integer> list = new ArrayList<>( 1 , 2 , 3 );

…在Java 9中,他們創(chuàng)建了更多的靜態(tài)方法并使我們做到這一點:

List<Integer> list = List.of( 1 , 2 , 3 );

“更少的構造函數,更多的靜態(tài)方法!” 似乎是那些介紹此JEP的人的哲學。 不用說,這完全違背了面向對象編程的精神。 無論Joshua Bloch 說什么,都必須由構造函數創(chuàng)建對象,而不是靜態(tài)方法。 靜態(tài)方法使我們看不到操作員new用法的時刻,這就是代碼難以維護的原因-我們只是不知道確切實例化了哪個類以及其ctor的實際參數是什么。

順便說一下,使用Cactoos,您可以正確地做到這一點:

List<Integer> list = new ListOf( 1 , 2 , 3 );

這是OOP。

InputStream新方法 。 在已經過大的類InputStream中添加了三個新方法: transferTo() , readNBytes()和readAllBytes() 。 現在,當我們想將輸入流復制到輸出流時,我們應該這樣做:

input.transferTo(output);

這是年輕的OOP程序員犯的最典型的錯誤之一:他們使接口變大。 只是因為他們需要更多功能。 我猜想接口隔離原則是著名的SOLID的一部分,并且已經使用了很多年。 Oracle,您怎么了? 下一步將是什么? 在Java 10中,我們還將具有saveToFile()和printToConsole()嗎? 怎么樣emailToAFriend() ?

這就是您將如何使用commons-io的IOUtils實用程序類進行操作:

IOUtils.copy(input, output);

這不是完美的 ,但是更好。 最面向對象的方式是使用對象,而不是實用程序類和靜態(tài)方法。 這就是Cactoos中的工作方式 :

new LengthOf( new TeeInput(input, output)).length();

這是OOP。

我認為Java越來越難看 ,這是一種趨勢。 這是否意味著該退出了? 沒有! 無論您多么丑陋,我們將永遠愛您Java!

您可能還會發(fā)現這些相關的帖子很有趣: 每個私有靜態(tài)方法都是新類的候選人 ; 靈活性等同于低質量 ; 為什么InputStream設計錯誤 ; 繼承是一種代碼重用的程序技術 ; 方法調用之間的時間耦合 ;

翻譯自: https://www.javacodegeeks.com/2017/10/java-9-good-bad-private-interface-methods.html

java 接口 私有

總結

以上是生活随笔為你收集整理的java 接口 私有_Java 9:好的,坏的和私有的接口方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。