在jdk17中新增了密封類。密封的類和介面限制了哪些其他類或介面可以拓展或實現它們。密封類這個新的特性在jdk15和jdk16中作為預覽功能。現在在jdk17中作為正式的功能,它與jdk16相比沒有任何變化。
密封類的作用和目標
密封類示例
我門首先定義乙個密封類——shape,這裡定義成了乙個抽象的密封類,也可以不是抽象的。
/**
* 密封類測試
* @author huhailong
* */
public
abstract
sealed
class
shape
permits
circle
,hexagon
,rectangle
上面的sealed
關鍵字用來表示這個類是乙個密封類,然後permits
表示可以繼承該類的子類,上面有三個,分別是:circle
、hexagon
、rectangle
。繼承了密封類的子類的修飾符也是有限制的,子類的必須是以下三種型別:
final
型別的子類當然是不能拓展的,密封型別的子類和父類類似,可以拓展指定的子類,非密封類則不限制它可以拓展的子類,其實final 在概念上等同於sealed 加上乙個沒有指定任何內容的許可子句,儘管不能編寫這樣的許可子句。下面是shape的三個子類,只有被指定允許繼承的子類可以繼承,其他的類不可以繼承,會報編譯時錯誤。
circle.j**a
/**
* 繼承密封類shape
* @author huhailong
* */
public
non-sealed
class
circle
extends
shape
hexagon.j**a
public
final
class
hexagon
extends
shape
rectangle.j**a
public
sealed
class
rectangle
extends
shape
}
可以看到在shape的子類rectangle也是密封型別,因此我們需要指定拓展它的子類,除了像shape中的那樣通過關鍵字permits
來指定外,也可以直接在rectangle內部,也就說密封類允許的子類可以直接寫到密封類的原始檔中,當以這種方式宣告時,密封類可以省略許可子句(permits
),j**a編譯器會從原始檔中的宣告推斷出允許的子類。
同樣的,密封介面和密封類的寫法是相似的。詳細的內容可參考官方文件。
JDK1 7的一些新特性
整理了幾條對開發可能用到概率高的 1 swicth支援對string的判斷 以前只能支援int及以下的 switch s 2 泛型的改善 jdk1.7 mapmap new hashmap mapmap new hashmap 3 對try catch多個異常的統一處理 try catch sqle...
JDK1 8中的hashmap和JDK1 7的區別
1.資料插入的方式不同 jdk1.7用的是頭插法,而jdk1.8用的是尾插法,這是由於jdk1.7是用單鏈表進行的縱向延伸,當採用頭插法時會容易出現逆序且環形鍊錶死迴圈問題。但是在jdk1.8之後是因為加入了紅黑樹使用尾插法,能夠避免出現逆序且鍊錶死迴圈的問題。2.組成結構不同 jdk1.7的時候使...
JDK8中新的日期類學習
1 獲得當前日期 年 月 日 localdate localdate localdate.now system.out.println localdate 返回的是個列舉物件 system.out.println 年 localdate.getyear t月 localdate.getmonth g...