国产毛多水多高潮高清,久热这里只有精品视频6,国内精品久久久久久久久电影网,国产男同志CHINA69,精品999日本久久久影院,人人妻人人澡人人爽人人精品,亚洲中文无码永久免

netty系列之:我有一个可扩展的Enum你要不要看一下?-环球体育官网APP下

netty系列之:我有一个可扩展的Enum你要不要看一下?

2026-01-20 03:55:50投稿人:CP彩票平臺(tái)官網(wǎng)(黃山)有限公司圍觀77163 評(píng)論

netty系列之:我有一個(gè)可擴(kuò)展的Enum你要不要看一下 ?

簡(jiǎn)介

很多人都用過(guò)java中的枚舉 ,枚舉是JAVA 1.5中引用的一個(gè)新的類型,用來(lái)表示可以列舉的范圍,但是可能很少有人知道java中的enum到底是怎么工作的,enum和Enum有什么關(guān)系  ?Enum可不可以擴(kuò)展 ?

一起來(lái)看看吧 。

enum和Enum

JAVA1.5中引入了枚舉類 ,我們通常使用enum關(guān)鍵字來(lái)定義一個(gè)枚舉類 :

public enum StatusEnum {     START(1,"start"),    INPROCESS(2,"inprocess"),    END(3,"end");    private int code;    private String desc;    StatusEnum(int code, String desc){         this.code=code;        this.desc=desc;    }}

上面的枚舉類中 ,我們自定義了構(gòu)造函數(shù),并且定義了3個(gè)枚舉對(duì)象 。

接下來(lái)看下怎么來(lái)使用這個(gè)枚舉類 :

public static void main(String[] args) {         StatusEnum start = START;        System.out.println(start.name());        System.out.println(start.ordinal());        System.out.println(start.code);        System.out.println(start.desc);    }

可以輸出code和desc很好理解 ,因?yàn)檫@是我們自定義的枚舉類中的屬性,但是name和ordinal是什么呢?他們是哪里來(lái)的呢?

這里就要介紹java.lang.Enum類了,它是JAVA中所有enum枚舉類的父類,name()和ordinal()方法就是在這個(gè)類中定義的:

public final int ordinal() {         return ordinal;    }public final String name() {         return name;    }

其中ordinal表示的是枚舉類中枚舉的位置,那么就是枚舉類中枚舉的名字。在上面的例子中,START的兩個(gè)值分別是1和START。

我們來(lái)看下Enum類的定義 :

public abstract class Enum>implements Comparable, Serializable

輸入它是一個(gè)抽象類 ,但是編譯器是不允許你繼承這個(gè)類的。如果你強(qiáng)行繼承,則會(huì)拋錯(cuò):

Classes cannot directly extend 'java.lang.Enum'

所以說(shuō) ,強(qiáng)扭的瓜不甜 ,大家一定要記住。

事實(shí)上 ,不僅僅Enum類本身不能被繼承,上面創(chuàng)建的enum類StatusEnum也是不能被繼承的 。

這會(huì)造成一個(gè)什么問(wèn)題呢?

如果這個(gè)enum是包含在一個(gè)外部jar包中的時(shí)候 ,你就沒(méi)法對(duì)該enum進(jìn)行擴(kuò)展 ,在某些特定的情況下  ,這樣的限制可能會(huì)帶來(lái)一些不便 。

還好 ,netty也意識(shí)到了這個(gè)問(wèn)題,接下來(lái) ,我們看下netty是怎么解決的。

netty中可擴(kuò)展的Enum:ConstantPool

netty中的表示常量的類叫做Constant ,它有兩個(gè)屬性 ,分別是ID和name :

public interface Constant>extends Comparable{     int id();    String name();}

存儲(chǔ)這些Constant的就叫做ConstantPool。ConstantPool中有一個(gè)ConcurrentMap用來(lái)保存具體的Constant。 我們看一下ConstantPool
的工廠類方法valueOf