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引數的型別。
詳細挖掘點選標題見原文
相關文章
- Kotlin Vocabulary | 密封類 sealed classKotlin
- 語言型別介紹及其Python的語言型別型別Python
- Java程式語言特點簡介Java
- 概念區別 【編譯型語言與解釋型語言、動態型別語言與靜態型別語言、強型別語言與弱型別語言】編譯型別
- 計算機語言:編譯型/解釋型、動態語言/靜態語言、強型別語言/弱型別語言計算機編譯型別
- 解釋型語言、編譯型語言 區別編譯
- 8 語言模型簡介模型
- 智慧合約語言 Solidity 教程系列1 – 型別介紹Solid型別
- java語言的入門介紹Java
- service型別及功能簡介+pod型別型別
- C語言-GCC的簡單介紹C語言GC
- Go語言工具簡介 - HoneybadgerGo
- 深入理解 Java17 新特性:Sealed ClassesJava
- go語言資料型別-基礎型別Go資料型別
- 淺談程式語言型別的強型別,弱型別,動態型別,靜態型別型別
- 通過調查數以百萬計的JVM虛擬機器發現當前Java使用情況 - Ben EvansJVM虛擬機Java
- GO語言————8.4 map 型別的切片Go型別
- go語言——資料型別Go資料型別
- C語言資料型別C語言資料型別
- 強型別語言變數和資料型別的理解變數資料型別
- Java與C語言的區別?JavaC語言
- 淺談強型別語言與弱型別語言,歡迎大家來點評型別
- C++ 引用型別簡介C++型別
- clickhouse資料型別簡介資料型別
- Go語言學習(1) - 簡介Go
- python之程式語言(簡介)01Python
- C語言基礎-C簡介C語言
- groovy 程式語言簡單介紹
- go語言簡單入門--常識和資料型別Go資料型別
- Java 10推斷型別和var關鍵字簡介Java型別
- C語言的隱式型別轉換C語言型別
- Python語言的全部資料型別分享!Python資料型別
- 程式語言:型別系統的本質型別
- python---之編譯型語言和解釋型語言的區別Python編譯
- Python 語言特性:編譯+解釋、動態型別語言、動態語言Python編譯型別
- 一、程式語言簡介與C++C++
- 用JavaScript實現一門程式語言 2 (λanguage語言簡介)JavaScript
- 程式語言語法:`=`表示賦值,`:`表示型別。賦值型別