」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼在 Java 中應避免使用常數介面?

為什麼在 Java 中應避免使用常數介面?

發佈於2024-11-08
瀏覽:270

Why Should Constant Interfaces Be Avoided in Java?

接口常量的令人困惑的目的

在Java 中,可以在接口中聲明字段,使它們隱式地公開、靜態和公開。最終的。這在開發人員中引起了疑問。

常數介面陷阱

與預期相反,在介面內定義常數被視為「常量介面反模式」。正如 Joshua Bloch 在《Effective Java》中所述,這種做法不必要地向使用者暴露了實作細節,並阻礙了未來的程式碼修改。此外,它將子類別綁定到常數介面。

平台異常

儘管有此警告,但在 Java 標準庫中仍可以找到幾個常量接口,例如 java.lang. io.ObjectStream常數。這些奇怪的現像不應作為範例,而應作為要避免的對比。

替代方法

為了防止與常數介面相關的陷阱,請考慮使用專用的實用程式類別私有建構子和靜態最終欄位。

public final class Constants {

    private Constants() {}

    public static final double PI = 3.14159;
    public static final double PLANCK_CONSTANT = 6.62606896e-34;
}

這種方法使常數保持私有,但可以透過靜態導入輕鬆存取。

import static Constants.PLANCK_CONSTANT;
import static Constants.PI;

public class Calculations {

    public double getReducedPlanckConstant() {
        return PLANCK_CONSTANT / (2 * PI);
    }
}

因此,雖然介面常數可能看起來很有趣,但由於潛在的設計缺陷,應該避免使用它們。使用帶有靜態final的私有類別來維護乾淨靈活的程式碼庫。

最新教學 更多>
  • 如何對混合排序的清單進行排序?
    如何對混合排序的清單進行排序?
    混合排序的列表列表給定一個包含兩個元素的列表列表,按特定順序對它們進行排序可能具有挑戰性。通常,排序是使用一種標準完成的。然而,在這種情況下,我們需要根據第一個元素按降序排列,第二個元素按升序排列。 要實現這個混合排序,我們可以利用 lambda 函數和 Python 中的 sort 方法。排序方法...
    程式設計 發佈於2024-11-08
  • 僱用離岸 PHP 開發人員時的法律注意事項
    僱用離岸 PHP 開發人員時的法律注意事項
    對於希望利用全球人才的企業來說,僱用離岸 PHP 開發人員可能是一項經濟高效的策略舉措。然而,了解法律環境對於確保合規性和保護您的商業利益至關重要。本文探討了聘用離岸 PHP 開發人員時的關鍵法律考量。 1. 智慧財產權 智慧財產權保護的重要性 在僱用離岸開發商時,保護您的智慧財產...
    程式設計 發佈於2024-11-08
  • 以下是一些標題選項,請記住問題格式和文章的重點是控制選擇框選項寬度:

**選項 1(更多技術性):**
* **如何控制Sele的寬度
    以下是一些標題選項,請記住問題格式和文章的重點是控制選擇框選項寬度: **選項 1(更多技術性):** * **如何控制Sele的寬度
    如何控制選擇框選項的寬度當選擇框中的選項超出框的寬度時,可能會造成混亂以及笨拙的外觀。為了解決這個問題,我們可以同時使用 CSS 和 JavaScript 來自訂選項的寬度並截斷任何多餘的文字。 CSS 方法:雖然單獨使用 CSS 是不行的足以設定選項的寬度,我們可以利用它來固定選擇框本身的寬度。透...
    程式設計 發佈於2024-11-08
  • Python 與 Java:深入探討最適合您的程式語言
    Python 與 Java:深入探討最適合您的程式語言
    大家好!你这周过得怎么样? ?无论您是正在进行编码马拉松、享受应得的休息,还是只是来这里探索新技术想法,我们都很高兴有您。今天,我们将深入探讨一个热门话题:Python 与 Java。 ? 这两个编程巨头经常处于争论的中心,尤其是在为下一个项目选择正确的语言时。你应该选择Python的简单性还是Ja...
    程式設計 發佈於2024-11-08
  • 合併關聯數組時如何對共享鍵的值求和?
    合併關聯數組時如何對共享鍵的值求和?
    合併數組並對共享鍵值求和在組合與共享鍵關聯的值時,經常需要合併多個關聯數組。預設情況下,數值組合併會覆蓋衝突的值,如提供的範例所示。為了解決這個問題,我們提出了一系列方法,可以有效地為共享密鑰添加值,同時保留唯一密鑰。 使用陣列中間體:一種方法是計算使用陣列中間值手動求和。這涉及到迭代合併數組的鍵並...
    程式設計 發佈於2024-11-08
  • React 基礎知識~渲染效能/ useTransition
    React 基礎知識~渲染效能/ useTransition
    假設我們要顯示大量數據,例如一萬條數據,在將下一個值輸入到輸入欄位時通常會出現延遲。 在這種情況下,當我們輸入一個值時,螢幕會顯示過濾後的資料。 但是,出現的一個問題是由於處理太多資料而延遲顯示下一個操作,例如在輸入欄位中輸入下一個值。 ·src/Example.js import { us...
    程式設計 發佈於2024-11-08
  • PHP提交表單時如何防止多次插入?
    PHP提交表單時如何防止多次插入?
    防止PHP 中表單提交時的多次插入當使用者多次按下提交按鈕時,可能會在提交表單時發生多次插入。這可能會導致意外的數據重複。有幾種方法可以解決此問題:JavaScript 提交按鈕停用:此方法使用 JavaScript 停用提交按鈕後點擊。但是,它並不可靠,因為可以在不使用按鈕或停用 JavaScri...
    程式設計 發佈於2024-11-08
  • 探索 JavaScript 中真值與假值的核心...
    探索 JavaScript 中真值與假值的核心...
    在 JavaScript 中,真值是在布林上下文中計算時被視為 true 的任何值。不虛假的值被認為是真實的。 真值範例: 任何非零數字 (1,-5,3.14) 非空字串 ("hello" ) 空間值(" ") 物件 ({}, []) 布林值...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中抑制 \"htmlParseEntityRef: waiting \';\' in Entity\" 警告?
    如何在 PHP 中抑制 \"htmlParseEntityRef: waiting \';\' in Entity\" 警告?
    正在解析“htmlParseEntityRef:期待';' in Entity”警告將HTML 內容加載到DOMDocument 時,您可能會遇到警告“htmlParseEntityRef: waiting ' ;'在實體中。若要在確保正確的實體解析的同時緩解此警告,...
    程式設計 發佈於2024-11-08
  • 深入了解 MySQL:為有抱負的資料庫管理員提供的綜合教程
    深入了解 MySQL:為有抱負的資料庫管理員提供的綜合教程
    您是一位有抱負的資料庫管理員,希望擴展您的 MySQL 技能嗎?別再猶豫了!我們從 LabEx 精選了 8 個綜合教程,涵蓋了廣泛的基本資料庫管理主題。 ? 從掌握索引、備份和復原等基本操作,到探索使用者權限管理和 SQL 查詢等進階概念,此合集適合每個人。無論您是初學者還是經驗豐富的專業人士,這...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中根據與另一個 2D 數組的交集從 2D 數組過濾行?
    如何在 PHP 中根據與另一個 2D 數組的交集從 2D 數組過濾行?
    基於行交集過濾二維數組的行在PHP 中,array_diff_assoc() 函數旨在找出兩個數組之間的差異,同時對鍵值進行優先排序對。然而,當使用此函數根據與另一個 2D 數組的交集來過濾 2D 數組中的行時,它可能不會總是產生預期的結果。 理解問題問題的出現​​是由於由 array_diff_a...
    程式設計 發佈於2024-11-08
  • SQLRAG:利用自然語言和法學碩士轉變資料庫交互
    SQLRAG:利用自然語言和法學碩士轉變資料庫交互
    在資料驅動的世界中,速度和洞察力的可訪問性至關重要,SQLRAG 帶來了一種與資料庫互動的全新方法。透過利用大型語言模型 (LLM) 的強大功能,SQLRAG 使用戶能夠使用自然語言查詢資料庫,從而無需深厚的 SQL 知識。在這篇文章中,我們將深入探討 SQLRAG 的工作原理、其主要功能,以及它如...
    程式設計 發佈於2024-11-08
  • 哪些建置系統可以擴展 Go 的開發工作流程?
    哪些建置系統可以擴展 Go 的開發工作流程?
    Go 建置系統:擴展您的開發工作流程Go 是一種以其簡單性和併發性而聞名的程式語言,已獲得廣泛的認可。隨著開發專案的發展,對強大的建置系統來自動化建置、測試和部署流程的需求變得至關重要。但是哪些建置系統支援 Go 並增強其功能? Makefile:初始 Go 建置系統傳統上,Go 依賴與其原始碼發行...
    程式設計 發佈於2024-11-08
  • 如何在 JavaScript 中安全處理空值
    如何在 JavaScript 中安全處理空值
    JavaScript 中的空值檢查使用 JavaScript 時,正確處理「空」值至關重要。但是,標準空檢查可能並不總是按預期工作。讓我們探討原因並提供替代解決方案。 了解JavaScript 的Null Check在JavaScript 中,相等運算子(==) 和嚴格相等運算子(===)分別檢查值...
    程式設計 發佈於2024-11-08
  • 使用 AWS Lambda 為 Next.js 建置無伺服器後端
    使用 AWS Lambda 為 Next.js 建置無伺服器後端
    在不斷發展的 Web 開發世界中,利用無伺服器架構已經成為遊戲規則的改變者,尤其是對於 Next.js 應用程式而言。透過整合 AWS Lambda,開發人員可以建立可擴展且高效的後端,而無需管理伺服器的開銷。在這篇文章中,我們將探討如何使用 AWS Lambda 為您的 Next.js 應用程式...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3