密封類別在 Java 15 中作為預覽功能引入,並在 Java 17 中永久保留,允許開發人員控制哪些類別可以擴展或實現它們。此功能是 Amber 專案的一部分,該專案旨在透過使用小而強大的功能來增強 Java 語言來提高開發人員的工作效率。
密封類是一種新的類,它限制其他類或介面可以擴展或實作它們。這樣做是為了提供更健壯且可維護的類型層次結構。當您定義密封類別時,您指定了一組允許的子類別。
要定義密封類,請使用 seal 關鍵字並使用 Permits 子句指定允許的子類別。這是一個例子:
public sealed class Shape permits Circle, Rectangle, Square { // class body } public final class Circle extends Shape { // class body } public final class Rectangle extends Shape { // class body } public final class Square extends Shape { // class body }
在此範例中,Shape 是一個密封類,僅允許 Circle、Rectangle 和 Square 擴展它。每個子類別必須是最終的、密封的或非密封的。
密封類別可用於對子類別集已知且固定的層次結構進行建模。這在領域建模和使用代數資料類型時特別有用。
這是使用具有模式匹配的密封類別的範例:
public class SealedClassExample { public static void main(String[] args) { Shape shape = new Circle(5); String result = switch (shape) { case Circle c -> "Circle with radius " c.radius(); case Rectangle r -> "Rectangle with width " r.width() " and height " r.height(); case Square s -> "Square with side " s.side(); }; System.out.println(result); } }
在此範例中,我們使用 switch 表達式來處理不同類型的 Shape。編譯器可以確保覆蓋所有可能的情況,因為 Shape 是密封的。
密封類別是 Java 的強大補充,可以更好地控制類別層次結構並增強程式碼的可讀性和可維護性。透過使用密封類,您可以在 Java 應用程式中建立更健全且定義良好的類型系統。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3