java更好的语言_五个使Java变得更好的功能
java更好的語言
我偶然發現了Brian Goetz 提出的有關Java數據類的建議 ,立即意識到我也對如何使Java更好地成為一種語言有一些想法。 我實際上有很多,但這只是五個最重要的簡短列表。
專制(2006),邁克·賈奇(Mike Judge)
全局變量 。 Java中有Singleton ,眾所周知,它只是全局變量 。 在Java中啟用全局變量并擺脫Singletons,不是很好。 PHP,JavaScript,Ruby和許多其他語言都有它們,為什么Java沒有? 看下面的代碼:
class User {private static final User INSTANCE;private User() {}public static User getInstance() {synchronized (User.INSTANCE) {if (User.INSTANCE == null) {User.INSTANCE = new User();}}return User.INSTANCE;}public String getName() {// return user's name} }然后,要訪問它,我們必須使用:
String name = User.getInstance().getName();這是一個單例。 看到它多么冗長嗎? 我們可以簡單地將其替換為全局變量( global是我建議使用的關鍵字):
global User user;然后:
user.getName();更少的代碼編寫,更容易閱讀!
全局函數和命名空間
為了將靜態方法組合在一起,我們創建了工具類 ,在其中我們必須定義私有構造函數以防止實例化。 同樣,我們必須記住靜態方法位于哪個特定的實用程序類中。這只是額外的麻煩。 我建議我們將全局函數添加到Java和可選的“命名空間”中以對它們進行分組。 看一下這個實用程序類:
class TextUtils {private TextUtils() {}public static String trim(String text) {if (text == null) {return "";}return text.trim();} }現在使用命名空間查看此全局函數:
namespace TextUtils {String trim(String text) {if (text == null) {return "";}return text.trim();} }我的觀點是,由于我們已經在使用類作為函數的集合,因此讓我們更加方便。 在某些應用程序中,我們甚至不需要名稱空間,而只需要全局函數,例如C和C ++。
完全訪問私有屬性和方法
為了從外部訪問私有屬性或對象的方法,我們必須使用Reflection API 。 這并不是特別困難,但是確實需要幾行代碼,而這些代碼并不容易閱讀和理解:
class Point {private int x;private int y; } Point point = new Point(); Field field = point.getClass().getDeclaredField("x"); field.setAccessible(true); int x = (int) field.get(point);我建議我們允許任何對象訪問另一個對象的任何屬性和方法:
Point point = new Point(); int x = point.x;當然,如果它們是私有的,則編譯器將發出警告。 在編譯時,您只需忽略警告并繼續。 如果您真的很關心封裝,請注意警告并采取其他措施。 但是在大多數情況下,程序員會忽略它,因為他們無論如何都會愉快地使用Reflection API。
默認為NULL
讓我們使用一組不完整的參數來調用構造函數和方法會很方便。 默認情況下,我們不提供的參數將設置為null 。 另外,當方法必須返回某些內容但沒有return語句時,Java應該返回null 。 這幾乎完全是它在PHP,Ruby和許多其他語言中的工作方式。 我相信這將是Java的便捷功能
猴子
開發人員也是如此。
當某些參數是可選的時,我們不需要定義太多方法。 方法重載非常冗長且難以理解。 相反,我們應該有一個帶有一長串參數的方法。 其中一些將由調用方提供,其他一些將被設置為null 。 該方法將決定要做什么,例如:
void save(File file, String encoding) {if (encoding == null) {encoding = "UTF-8";} }然后,我們只調用save(f)或save(f, "UTF-16") 。 該方法將理解我們的意思。 我們還可以使其更加方便,就像在Ruby中一樣,通過名稱提供方法參數:
save(file: f, encoding: "UTF-16");同樣,當沒有任何要返回的內容時,默認情況下該方法必須返回null 。 編寫return null只是浪費代碼行,并不能真正提高可讀性。 看一看:
String load(File file) {if (file.exists()) {return read_the_content();} }從此代碼顯而易見,如果文件存在,則該方法將加載并返回其內容。 如果不是,它將返回null ,這將為調用者提供一個很好的指示,表明某些錯誤和文件內容不可用。
吸氣劑和二傳手
我認為這很明顯是我們需要此功能的:每個私有屬性都必須自動具有setter和getter 。 無需創建它們,Java將像Kotlin和Ruby一樣提供現成的它們。 如果沒有getter和setter方法來讀取和修改它,那么擁有一個屬性有什么意義呢?
有了這項新功能,我們將不再需要Lombok或IntelliJ IDEA的幫助。
也許我應該把我的想法變成對JCP的正式建議。 你怎么看?
您可能還會發現這些相關的帖子很有趣: 每個私有靜態方法都是新類的候選人 ; 嘗試。 最后。 如果。 不。 空值。 ; 為什么NULL是錯誤的? ; 為什么在OOP中很多退貨聲明是個壞主意 ; 對象可以成為朋友嗎? ;
翻譯自: https://www.javacodegeeks.com/2017/11/five-features-make-java-even-better.html
java更好的語言
總結
以上是生活随笔為你收集整理的java更好的语言_五个使Java变得更好的功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 已备案网站(已备案网址)
- 下一篇: 金盾ddos防护远程配置方法(金盾ddo