工具類不應該有公有的構造函數

java 項目中使用的工具類非常多,比如JDK自己的工具java.lang.Math 、java.util.Collections 等都是我們經常用到的工具類。工具類的屬性和方法都是靜態(tài)的,不需要生成實例即可訪問,而且JDK也做了很好的處理,由于不希望被初始化,于是設置了構造函數為private的權限,表示除了此類本身外,誰都不能產生一個實例。

java.lang.Math的部分代碼
public final class Math {
    /**
     * Don't let anyone instantiate this class.
     */
    private Math() {}
}

Math的構造函數設置成了private了:我就是一個工具類,我只想其它類通過類名來訪問,我不想通實例對象訪問。這在平臺型和框架型項目中已經足夠了。但是已經告訴你不能這么做了,你還是要實例Math類來訪問屬性和靜態(tài)方法(java反射是如此的發(fā)達,修改一個構造函數的訪問權限易如反掌),這樣就確保不了正確性了,隱藏的問題隨時都可能爆發(fā)!那我們在項目開發(fā)中有沒有更好的限制辦法呢?有,不僅僅設置成private訪問權限,還要拋異常,代碼實例如下:

public class LdapUtils {
    private LdapUtils() {
            throw new Error("請不要實例化我!");
    }
}

這樣做才能確保工具類才能不會被實例化,并且保證所有訪問都是通過類名來進行的。需要注意的是,此工具類不能做繼承的打算,因為如果子類可以實例化的話,那就要調用父類的構造函數,可以父類沒有被訪問的構造函數,于是問題自然而然就出現了。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,853評論 18 399
  • 一、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向對象程序設計...
    子非魚_t_閱讀 4,654評論 1 44
  • 今天下午見了我的畢設導師,匯報了一下我的畢設進展。導師說后期著重于校園建筑的模型建立和基礎設施的添加,之后再添加幾...
    不會飛的章魚閱讀 206評論 0 0
  • 在朋友圈里看到一句話:不做輸出的閱讀只是打發(fā)時間,沒有意義。 現在非常認同這一點。 以前看書的時候喜歡看完一本就開...
    我就是卷貓閱讀 323評論 1 1
  • 小時候總有很多夢想,在學??粗蠋熓裁炊级€可以讓學生寫作業(yè)就想這以后我也一定要做一個老師哪樣我就可以讓我的學生寫...
    南山老太閱讀 253評論 2 2

友情鏈接更多精彩內容