今天我把我的Java版本從16更新到17,我發現sealed類是它的一個新特性。我認為它可以這樣宣告:
public sealed class Main {
...
}
但是,在Java中,密封類有什么用呢?
(我還知道這是Java 15中的一個預覽功能。)
uj5u.com熱心網友回復:
簡而言之,密封類給了我們一個很好的解決方案。
簡而言之,密封類讓你可以控制哪些模型、類等可以實作或擴展該類/介面。
鏈接中的例子:
public sealed interface Service permits Car, Truck {
int getMaxServiceIntervalInMonths()。
default int getMaxDistanceBetweenServicesInKilometers() {
return 100000;
}
這個介面只允許汽車和卡車實作它。
uj5u.com熱心網友回復:
一個密封的類或介面只能由那些允許這樣做的類和介面來擴展或實作。
你可以找到一個很好的檔案。
uj5u.com熱心網友回復: JEP 409解釋為一個密封的類或介面只能被那些被允許這樣做的類和介面擴展或實作。
延伸或實作。
一個密封的類或介面只能由那些被允許這樣做的類和介面來擴展或實作。
一個更實際的解釋如下:
在這個程序中,我們可以看到,在我們的世界中,有很多人都在使用這個方法。
過去的情況是: 現在的情況是: 你現在可以限制一個介面被其他介面擴展,并制定一個規則,只允許某些特定的介面擴展它。
示例: 你現在可以創建一個介面,并且只選擇允許實作該介面的特定類。
來實作該介面。所有其他的類都不允許實作它。
示例: 你現在可以限制一個類被擴展(與之前的final相同),但你現在可以允許一些特定的類來擴展它。所以現在你有了更多的控制權,因為之前的關鍵字final是絕對的,它限制了每一個類對已宣告的final類進行擴展 例子: 我們可以在我們的網站上看到一些關于final的資訊。
舉例: 密封的類和它允許的子類必須屬于同一個模塊,如果在一個未命名的模塊中宣告,則必須屬于同一個包。
例子: 假設我們有同一個未命名的模塊和以下的包 我們有同一個未命名的模塊。
或者 你會得到一個錯誤類不允許從另一個包擴展密封的類。因此,如果你有一個未命名的模塊,所有參與密封功能的類和介面都必須完全放在同一個包里。
每個允許的子類必須直接擴展密封的類。
uj5u.com熱心網友回復: 這里有一個2分鐘的快速視頻解釋
什么是Java 17中的密封類 ===================================================================== 密封類和介面限制了哪些其他類或介面可以擴展或實作它們。
目的:
public sealed interface MotherInterface permits ChildInterfacePermitted {}。
//Has to be declared either as sealed or non-sealed。
public非密封interface ChildInterfacePermitted extends MotherInterface {}.
public interface AnotherChildInterface extends MotherInterface {}。
//compiler error! 它不包括在母體界面的許可中
public sealed interface MotherInterface permits ImplementationClass1 {}。
必須被宣告為final或被宣告為密封的或非密封的
public final class ImplementationClass1 implements MotherInterface {}。
public class ImplementationClass2 implements MotherInterface {}.
//compiler error! 它不包括在母體界面的許可中。
public sealed class MotherClass permits ChildClass1 {}。
必須被宣告為final或被宣告為密封的或非密封的
public非密封class ChildClass1 extends MotherClass {}.
public class ChildClass2 extends MotherClass {}.
//compiler error! 它不包括在MotherClass的許可中
重要的說明:
-packageA
-Implementationclass1.java
-包B
-母體類.java
-root
-MotherClass.java
-包裝A
-Implementationclass1.java
。
Reference Open JDK Java 17 Sealed Class Official Doc/a>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328118.html
標籤:
