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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

五个使Java变得更好的功能

發(fā)布時(shí)間:2023/12/3 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 五个使Java变得更好的功能 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我偶然發(fā)現(xiàn)了Brian Goetz 提出的有關(guān)Java數(shù)據(jù)類的建議 ,立即意識(shí)到我也對(duì)如何使Java更好地成為一種語(yǔ)言有一些想法。 我實(shí)際上有很多,但這只是五個(gè)最重要的列表。

專制(2006),邁克·賈奇(Mike Judge)

全局變量 。 Java中有Singleton ,眾所周知,它只是全局變量 。 在Java中啟用全局變量并擺脫Singletons,不是很好。 PHP,JavaScript,Ruby和許多其他語(yǔ)言都有它們,為什么Java沒(méi)有? 看下面的代碼:

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} }

然后,要訪問(wèn)它,我們必須使用:

String name = User.getInstance().getName();

這是一個(gè)單例。 看到它多么冗長(zhǎng)嗎? 我們可以簡(jiǎn)單地將其替換為全局變量( global是我建議使用的關(guān)鍵字):

global User user;

然后:

user.getName();

更少的代碼編寫,更容易閱讀!

全局函數(shù)和命名空間

為了將靜態(tài)方法組合在一起,我們創(chuàng)建了實(shí)用工具類 ,在其中我們必須定義私有構(gòu)造函數(shù)以防止其實(shí)例化。 此外,我們還必須記住靜態(tài)方法位于哪個(gè)特定的實(shí)用程序類中。這只是額外的麻煩。 我建議我們將全局函數(shù)添加到Java和可選的“命名空間”中,以對(duì)它們進(jìn)行分組。 看一下這個(gè)實(shí)用程序類:

class TextUtils {private TextUtils() {}public static String trim(String text) {if (text == null) {return "";}return text.trim();} }

現(xiàn)在使用命名空間查看此全局函數(shù):

namespace TextUtils {String trim(String text) {if (text == null) {return "";}return text.trim();} }

我的觀點(diǎn)是,由于我們已經(jīng)在使用類作為函數(shù)的集合,因此讓我們更加方便。 在某些應(yīng)用程序中,我們甚至不需要名稱空間,而只需要全局函數(shù),例如C和C ++。

完全訪問(wèn)私有屬性和方法

為了從外部訪問(wèn)私有屬性或?qū)ο蟮姆椒?#xff0c;我們必須使用Reflection API 。 這并不是特別困難,但是確實(shí)需要幾行代碼,而這些代碼并不容易閱讀和理解:

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);

我建議我們?cè)试S任何對(duì)象訪問(wèn)另一個(gè)對(duì)象的任何屬性和方法:

Point point = new Point(); int x = point.x;

當(dāng)然,如果它們是私有的,則編譯器將發(fā)出警告。 在編譯時(shí),您只需忽略警告并繼續(xù)。 如果您真的很關(guān)心封裝,請(qǐng)注意警告并采取其他措施。 但是在大多數(shù)情況下,程序員會(huì)忽略它,因?yàn)樗麄儫o(wú)論如何都會(huì)愉快地使用Reflection API。

默認(rèn)為NULL

讓我們使用一組不完整的參數(shù)來(lái)調(diào)用構(gòu)造函數(shù)和方法會(huì)很方便。 默認(rèn)情況下,我們不提供的參數(shù)將設(shè)置為null 。 另外,當(dāng)方法必須返回某些內(nèi)容但沒(méi)有return語(yǔ)句時(shí),Java應(yīng)該返回null 。 這幾乎完全是它在PHP,Ruby和許多其他語(yǔ)言中的工作方式。 我相信這將是Java的便捷功能

猴子
開發(fā)人員也是如此。

當(dāng)某些參數(shù)是可選的時(shí),我們不需要定義太多方法。 方法重載非常冗長(zhǎng)且難以理解。 相反,我們應(yīng)該有一個(gè)帶有一長(zhǎng)串參數(shù)的方法。 其中一些將由調(diào)用者提供,其他一些將被設(shè)置為null 。 該方法將決定要做什么,例如:

void save(File file, String encoding) {if (encoding == null) {encoding = "UTF-8";} }

然后,我們只調(diào)用save(f)或save(f, "UTF-16") 。 該方法將理解我們的意思。 我們還可以使其更加方便,就像在Ruby中一樣,通過(guò)名稱提供方法參數(shù):

save(file: f, encoding: "UTF-16");

另外,當(dāng)沒(méi)有任何要返回的內(nèi)容時(shí),默認(rèn)情況下該方法必須返回null 。 編寫return null只是浪費(fèi)代碼行,并不能真正提高可讀性。 看一看:

String load(File file) {if (file.exists()) {return read_the_content();} }

從這段代碼中可以明顯看出,如果文件存在,則該方法將加載并返回其內(nèi)容。 如果不是,它將返回null ,這將為調(diào)用者提供一個(gè)很好的指示,表明某些錯(cuò)誤和文件內(nèi)容不可用。

吸氣劑和二傳手

我認(rèn)為我們需要此功能很明顯:每個(gè)私有屬性都必須自動(dòng)具有setter和getter 。 無(wú)需創(chuàng)建它們,Java將像Kotlin和Ruby一樣提供現(xiàn)成的它們。 如果沒(méi)有用于讀取和修改它的getter和setter方法,那么擁有一個(gè)屬性有什么意義呢?

有了這項(xiàng)新功能,我們將不再需要Lombok或IntelliJ IDEA的幫助。

也許我應(yīng)該把我的想法變成對(duì)JCP的正式建議。 你怎么看?

您可能還會(huì)發(fā)現(xiàn)這些相關(guān)的帖子很有趣: 每個(gè)私有靜態(tài)方法都是新類的候選人 ; 嘗試。 最后。 如果。 不。 空值。 ; 為什么NULL是錯(cuò)誤的? ; 為什么在OOP中很多退貨聲明是個(gè)壞主意 ; 對(duì)象可以成為朋友嗎? ;

翻譯自: https://www.javacodegeeks.com/2017/11/five-features-make-java-even-better.html

總結(jié)

以上是生活随笔為你收集整理的五个使Java变得更好的功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。