Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

这是AI翻译的帖子。

제이온

[有效 Java] 項目 4. 要阻止實例化,請使用私有建構函數

  • 写作语言: 韓国語
  • 基准国家: 所有国家 country-flag

选择语言

  • 汉语
  • English
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

durumis AI 总结的文章

  • 在建立僅包含靜態方法和欄位的工具類時,應將建構函數設為 private,以阻止實例化。
  • 這可以防止在類別外部呼叫建構函數,並可以明確地控制編譯器自動生成的 public 默認建構函數。
  • 私有建構函數會使繼承變得不可能,因此可以限制對工具類的故意使用,並提高程式碼的可讀性。

有時使用只包含靜態方法和靜態字段的類很有用。


例如,可以使用 `java.lang.Math`、`java.util.Arrays` 等類來收集數學運算或與數組相關的方法。 或者,可以使用 `java.util.Collections` 等類來收集生成實現特定接口的對象的靜態工廠方法。


這些實用程序類不需要單獨的實例變量或方法,因此不需要構造函數。但是,如果沒有顯式聲明構造函數, 編譯器將自動創建一個公共默認構造函數。因此,用戶無法區分此構造函數是自動生成的還是手動編寫的。


為了避免這種情況,有時會使用抽象類,但抽象類無法阻止實例化。因為可以創建子類並實例化它們。


public abstract class Person {

    public static void speak(String message) {
        System.out.println(message);
    }
}

public class Student extends Person {

    public Student() {
        super();
    }


因此,為了防止實用程序類的實例化,需要將構造函數的訪問修飾符設置為 `private`。


public abstract class Person {

    private Person() {
        throw new AssertionError();
    }

    public static void speak(String message) {
        System.out.println(message);
    }


如上所示,如果默認構造函數的訪問修飾符為 `private`,則外部無法訪問它。此外,如果在內部調用默認構造函數, 則會拋出異常以阻止它。


這種私有構造函數可能難以理解,因此建議添加註釋。另外,將構造函數設置為 `private` 會導致無法繼承類。


來源

제이온
제이온
제이온
제이온
[Effective Java] 项目 5. 不要显式地使用资源,而应该使用依赖注入 如果类依赖于外部资源,则最好不要使用单例和静态实用程序类。通过依赖注入,可以提高类的灵活性、可重用性和可测试性,而使用工厂方法模式可以使依赖注入更加高效。

2024年4月28日

[Effective Java] 項目 2. 若建構函式有許多參數,請考慮使用建構器 在建立具有許多參數的物件時,使用建構器模式可以使程式碼更乾淨易讀。使用必要的參數建立建構器物件,使用 setter 方法設定選用參數,最後呼叫 build() 方法完成物件。此模式特別適用於分層設計的類別。 ([Effective Java]節錄)

2024年4月27日

[Effective Java] 項目 1. 考慮使用靜態工廠方法而非建構函式 靜態工廠方法是一種比建構函式更靈活且有效率的建立實例的方法。它們可以具有名稱,並可返回符合特定條件的實例,並可透過快取來提高效能。與單例模式不同,靜態工廠方法可以建立和返回多種類型的實例,並且可以保持彈性,而無需使用反射。

2024年4月27日

[Javascript] 物件的結構 (V8) JavaScript 的 Object 在 V8 引擎中根據狀態可以被優化為類似結構體的 Fast 模式或以雜湊表運作的 Dictionary 模式。Fast 模式是針對幾乎固定形式的鍵和值進行優化,速度很快,但當新增新鍵或刪除元素等操作時, 會轉換為 Dictionary 模式,速度會變慢。
곽경직
곽경직
곽경직
곽경직
곽경직

2024年3月18日

[并发] 原子操作:内存栅栏和内存顺序 这篇博文将解释在原子操作中如何考虑内存顺序,以及排序选项的重要性。 它将详细解释各种排序选项,例如 Relaxed、Acquire、Release、AcqRel 和 SecCst,以及每个选项的优缺点, 并提供使用示例代码。
곽경직
곽경직
곽경직
곽경직
곽경직

2024年4月12日

Rust 如何防止并发错误 Rust 是一种强大的语言,可以解决并发编程的难题。 由于其类型系统和所有权模型,线程之间的数据传递和共享是安全的。 通过内部可变性模式,例如 Mutex、Channel 和 Atomic,可以定义共享变量并安全地使用它们。 Rust 积极解决并发问题,使其广泛应用于大型系统开发。
곽경직
곽경직
곽경직
곽경직
곽경직

2024年3月28日

邏輯數據模型 邏輯數據模型是將概念數據模型轉換為關係數據庫範式的過程,根據映射規則,將 1:1、1:N、N:M 關係 轉換為關係數據庫中的表格,並通過正規化來確保數據完整性。通過 1NF、2NF、3NF 的正規化過程,對表格進行 優化,消除部分依賴和傳遞依賴。
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2024年4月9日

[非计算机专业,如何成为一名开发者] 14. 新手开发者常问的技术面试内容总结 本指南旨在为新手开发者提供技术面试准备指导。涵盖了面试中常见的概念,例如主内存区域、数据结构、关系型数据库 (RDBMS) 和 NoSQL、过程式编程和面向对象编程、重写和重载、页面替换算法、进程和线程、OSI 七层模型、TCP 和 UDP 等。
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024年4月3日

[SI 開發者故事] 12. SI 專案中常用的技術棧 韓國 SI 開發者主要使用基於 Java 的 Spring、Oracle DB、MyBatis、JSP、JavaScript、HTML、CSS 等技術棧,開發高效穩定且安全的 IT 系統,並使用 Eclipse 作為開發環境。這些技術有助於中小企業節省成本和提高生產力。
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024年4月19日