Java語言的新密封Sealed型別簡介 - Ben Evans
密封Sealed表示的概念是可以擴充套件一個類,但只能透過已知的子型別列表進行擴充套件,而不能透過其他任何擴充套件。
其他語言可能對功能的看法有所不同,但是在Java中,應將其視為代表“幾乎最終的”類的功能。
讓我們來看一個簡單示例的新語法的當前版本:
public abstract sealed class SealedPet permits Cat, Dog { protected final String name; public abstract void speak(); public SealedPet(String name) { this.name = name; } } public final class Cat extends SealedPet { public Cat(String name) { super(name); } public void speak() { System.out.println(name +" says Meow"); } public void huntMouse() { System.out.println(name +" caught a mouse"); } } public final class Dog extends SealedPet { public Dog(String name) { super(name); } public void speak() { System.out.println(name +" says Woof"); } public void pullSled() { System.out.println(name +" pulled the sled"); } } |
SealedPet現在是一個abstract sealed類,它是迄今為止Java中尚未允許使用的關鍵字。其次,使用第二個新關鍵字,permits可使開發人員列出此密封型別的允許子類。(如果未提供允許的子型別列表,則從同一編譯單元中的子型別推斷出來。)
Pet的任何例項都必須是一個Cat或一個Dog這兩個子類中一個。
而且,編譯器也可以使用此資訊。這意味著庫程式碼現在可以安全地假設這是唯一的可能性,並且客戶端程式碼不會違反此假設。
用物件導向的程式設計理論來說,這代表了一種新的形式關係:一個物件o是一個is-a Cat或Dog,o是Cat和Dog的並集。
從表面上看,這些型別似乎是Java中的一個全新概念,但是它們與列舉的深層相似性應該為許多Java程式設計師提供一個良好的起點。實際上,在某個地方已經存在類似於求和型別的東西:multicatch子句中的exception引數的型別。
詳細挖掘點選標題見原文
相關文章
- C#之 sealed(密封類和密封方法)C#
- c# sealed override密封類_密封方法C#IDE
- 語言型別介紹及其Python的語言型別型別Python
- Kotlin Vocabulary | 密封類 sealed classKotlin
- Java 語言是強型別語言語言(轉)Java型別
- 蘋果的新程式語言 Swift 簡介蘋果Swift
- 概念區別 【編譯型語言與解釋型語言、動態型別語言與靜態型別語言、強型別語言與弱型別語言】編譯型別
- Java程式語言特點簡介Java
- Ben Evans(倫敦Java User Group Lead)非正式訪談錄Java
- Ben Evans:保守的設計思想是Java的最大優勢(圖靈訪談)Java圖靈
- 解析Java語言的介面與型別安全(轉)Java型別
- 計算機語言:編譯型/解釋型、動態語言/靜態語言、強型別語言/弱型別語言計算機編譯型別
- Lisp語言簡介Lisp
- ben-evans:WhatsApp日訊息量超過全球簡訊傳送量APP
- 解釋型語言與編譯型語言的區別?編譯
- 解釋型語言、編譯型語言 區別編譯
- 《Java程式設計師修煉之道》作者Ben Evans:保守的設計思想是Java的最大優勢Java程式設計師
- Ben Evans:中國上百萬臺“被消失的”安卓平板去了哪裡?安卓
- 8 語言模型簡介模型
- Go 語言簡介(上)— 語法Go
- Kotlin——中級篇(六):資料類(data)、密封類(sealed)詳解Kotlin
- q語言的資料型別資料型別
- service型別及功能簡介+pod型別型別
- 編譯型語言和解釋型語言的區別編譯
- 深入理解 Java17 新特性:Sealed ClassesJava
- java語言的入門介紹Java
- go語言資料型別-基礎型別Go資料型別
- 淺談程式語言型別的強型別,弱型別,動態型別,靜態型別型別
- C語言-1.簡介C語言
- C語言-GCC的簡單介紹C語言GC
- C語言資料型別C語言資料型別
- C語言(共用體型別)C語言型別
- go語言——資料型別Go資料型別
- GO語言————8.4 map 型別的切片Go型別
- c語言的基本資料型別C語言資料型別
- 智慧合約語言 Solidity 教程系列1 – 型別介紹Solid型別
- 強型別語言變數和資料型別的理解變數資料型別
- C語言(typedef 型別取別名)C語言型別