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:好的,坏的和私有的接口方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 680元民宿被平台调成2780元 老板:
- 下一篇: java美元兑换,(Java实现) 美元