DEV Community

ian chen
ian chen

Posted on

📌 final / readonly 觀念筆記

📖 Java final 關鍵字

用法 說明
final 變數 賦值後不可再變更參考,但物件內部內容可改
final 方法 子類別不能 override 這個方法
final class 這個 class 不能被繼承

📌 範例:final 變數

final List<String> list = new ArrayList<>();
list.add("Hello");      // ✅ OK,改內容
list = new ArrayList<>(); // ❌ 不行,不能改變參考
Enter fullscreen mode Exit fullscreen mode

📖 C# 對應概念

功能 Java C#
變數賦值後不可改變參考 final readonly
防止子類 override 方法 final sealed
防止 class 被繼承 final sealed

📌 C# readonly 範例

public class UserService
{
    private readonly UserRepository _userRepository;

    public UserService(UserRepository userRepository)
    {
        _userRepository = userRepository;
    }
}
Enter fullscreen mode Exit fullscreen mode

📖 注意:

  • final / readonly 限制的是「參考(reference)不能改」,物件內部的狀態還是可以改變
  • 如果要讓物件內部不可改,需搭配 immutable 類型或資料結構

📌 延伸觀念:建構子注入搭配 final / readonly

推薦將依賴透過建構子注入並宣告成 final (Java) / readonly (C#),以保證依賴物件的參考安全、不被覆寫、且易於測試與維護。


✅ 小結

  • final / readonly 保護的是 參考
  • sealed 保護的是 方法與 class 結構
  • 操作物件內容不違反 final / readonly 規則,只是不能換參考。

Top comments (0)