📖 Java final
關鍵字
用法 |
說明 |
final 變數 |
賦值後不可再變更參考,但物件內部內容可改 |
final 方法 |
子類別不能 override 這個方法 |
final class |
這個 class 不能被繼承 |
📌 範例:final 變數
final List<String> list = new ArrayList<>();
list.add("Hello"); // ✅ OK,改內容
list = new ArrayList<>(); // ❌ 不行,不能改變參考
📖 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;
}
}
📖 注意:
-
final
/ readonly
限制的是「參考(reference)不能改」,物件內部的狀態還是可以改變
- 如果要讓物件內部不可改,需搭配 immutable 類型或資料結構
📌 延伸觀念:建構子注入搭配 final / readonly
推薦將依賴透過建構子注入並宣告成 final
(Java) / readonly
(C#),以保證依賴物件的參考安全、不被覆寫、且易於測試與維護。
✅ 小結
-
final
/ readonly
保護的是 參考
-
sealed
保護的是 方法與 class 結構
- 操作物件內容不違反 final / readonly 規則,只是不能換參考。
Top comments (0)