Yegor Bugayenko稱,他偶然受到了Brian Goetz關于Java中數據類提議的啟發,立即意識到自己也有一些關于如何使Java成為更好語言的想法。其中,以下這五個最重要的。
全局變量
Java中有單例,這大家都知道。如果能在Java中啟用全局變量并擺脫單例對象,這不是很好么。PHP,JavaScript,Ruby和許多其他語言都有,為什么Java沒有?看看這個代碼:
這是一個單例,但是它很冗長。可以簡單地用一個全局變量替換它:
編寫更少的代碼,閱讀起來更容易!
全局函數和命名空間
為了將靜態方法組在一起,我們創建了工具類,必須定義私有構造函數來防止它們實例化。另外,還必須記住靜態方法所在的特定工具類中,這樣的方法一點都不高效。Yegor Bugayenko建議我們將全局函數添加到Java和可選的“名稱空間”來對它們進行分組。 看看這個工具類:
Yegor Bugayenko的觀點是,既然已經在使用類作為函數的集合了,那么就讓它更方便一些。在一些應用程序中,我們甚至不需要命名空間,只需要全局函數,例如C或者C ++。
完全訪問私有屬性和方法
為了從外部訪問私有屬性或對象的方法,我們必須使用Reflection API。這并不是特別困難,但它需要的這些代碼卻不容易閱讀和理解:
Yegor Bugayenko建議,允許任何對象訪問另一個對象的任何屬性和方法:
當然,如果它們是私有的,編譯器會發出警告。在編譯時,您只需忽略警告并繼續工作。
默認為NULL
可以用不完整的參數來調用構造函數和方法。默認情況下,我們不提供的參數將默認被設置為null。另外,當一個方法必須有返回值時,但是沒有返回語句時,Java應該返回null。這幾乎就是它在PHP,Ruby和許多其他語言中的工作原理。
當一些參數是可選的時,我們不需要定義這么多的方法。方法重載非常冗長,而且難以理解。相反,應該有一個具有參數列表的方法。其中一些將由調用者提供,另一些將被設置為空。該方法將決定要做什么,例如:
然后調用save(f)或save(f,“UTF-16”)。 該方法將更方便,就像在Ruby中一樣,通過名稱提供方法參數:
另外,當沒有返回值時,該方法必須默認返回null。寫入返回null是浪費時間的,這并不能真正提高可讀性:
從這段代碼中可以明顯看出,如果文件存在,該方法將加載并返回其內容。如果不是,則返回null,這對于調用者來說是一個很好的指示器。
getter和setter
顯而易見,我們需要這個特性:每個私有屬性都必須自動擁有setter和getter。不需要去創建,就像Kotlin和Ruby一樣,Java應該提供。如果沒有getter和setter來讀取并修改,那么又有什么意義呢?
有了這個新功能,就不再需要Lombok或IntelliJ IDEA的輔助。