簡體   English   中英

為什么 Boolean 對象在 Java 中有一個公共構造函數?

[英]Why does the Boolean object have a public constructor in Java?

Java 中構造函數new Boolean(boolean value)文檔說明:

注意:很少使用這個構造函數。 除非需要新實例,否則靜態工廠valueOf(boolean)通常是更好的選擇。 它可能會產生明顯更好的空間和時間性能。

如果是這樣,為什么這個構造函數是公開的而不是被棄用的? 是否有充分的理由使用此構造函數而不是Boolean.valueOf()

valueOf()僅在 Java 1.4 中添加,因此構造函數的存在似乎是為了向后兼容。

這張票解釋了不棄用構造函數的原因:

由於棄用 API 可能會造成中斷,因此當前 API 必須具有“積極危險”才能棄用,例如 Thread.stop。 雖然使用這個構造函數肯定是不明智的,但它並沒有上升(或下降)到 JDK 中被棄用的危險標准。 將來,我們可能會添加一個“貶低”工具來標記 API 元素,這些元素不是很糟糕,應該被棄用,但在大多數情況下不應該使用。 這個構造函數將是一個很好的詆毀候選人。

我想不出一個現實的場景,其中使用Boolean構造函數是做一些有用的事情的最佳方式。

通常,您會想要直接使用valueOf(boolean)甚至Boolean.TRUE / Boolean.FALSE常量。

但是想一想您想要使用私有Boolean變量作為同步線程的監視器的場景。 在那里,您需要確保使用自己的實例並完全控制它。

另一個不一定很好的理由可能是簡單地保持它與其他本機包裝器一致。

從 Java 9 開始, Boolean(boolean)構造函數已被棄用 請參閱javadoc

對於那些關心歷史的人來說,有一個長期存在的錯誤要求棄用構造函數。 它是在JEP 277 中正式提出的,還有一些其他的棄用。

它沒有被棄用的原因是 Java 保持向后兼容 1.0 版

我想不出使用構造函數的好理由。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM