Enum深入解析

2021-10-19 17:23:45 字數 2651 閱讀 4537

人生有涯,學海無涯

列舉就是乙個語法糖效果。

定義乙個列舉,其實就是定義乙個繼承抽象類enum的類。

了解了enum,就能了解列舉。

public

abstract

class

enum

enum

>

implements

comparable

, serializable

列舉類實現了comparable和serializable介面,那麼也就意味著,每個列舉類都擁有比較(有序)和序列化功能。

public

abstract

class

enum

enum

>

implements

comparable

, serializable

public

final

intordinal()

}

這兩個屬性是列舉的內建屬性,name表示的是列舉值的名稱,ordinal表示的是列舉值的序號。

其作用後面再說

public

abstract

class

enum

enum

>

implements

comparable

, serializable

}

enum中只有這乙個構造器,其申明為protected就是為了繼承它的子類(我們定義的各種列舉)來呼叫的。

public

abstract

class

enum

enum

>

implements

comparable

, serializable

}

預設的equals方法底層就是使用實現的,所以在列舉的比較使用equals和都是可以的。前提是沒有在列舉類中重寫equals方法。

我們可以在自定義的列舉類中重寫該方法,來實現我們自己的比較方式。

public

abstract

class

enum

enum

>

implements

comparable

, serializable

protected

final

void

finalize()

private

void

readobject

(objectinputstream in)

throws ioexception,

classnotfoundexception

private

void

readobjectnodata()

throws objectstreamexception

}

這四個方法均是被禁用的方法:

public

abstract

class

enum

enum

>

implements

comparable

, serializable

}

這是實現了介面comparable中的方法。用於定義比較的方式,可以看出這裡是使用列舉值的序號作為比較條件的。

public

abstract

class

enum

enum

>

implements

comparable

, serializable

}

該方法的作用是獲取到指定列舉型別中指定列舉名稱的列舉值。

列舉是一種編譯器語法糖。

我們使用enum關鍵字定義乙個列舉,編譯之後,編譯器會對其進行加工,具體如下:

編譯成為class型別,並繼承自enum

新增靜態的values方法,用於獲取所有列舉值的陣列

新增valueof方法,實現enum中的valueof方法,可以根據具體的列舉值名稱字串獲取對應的列舉值

新增私有構造器,其中呼叫enum中定義的唯一的構造器

定義靜態常量列舉值

新增靜態塊為這些靜態列舉常量賦值

通過上面一些列加工之後,列舉類被解析為乙個普通的類,類名不變。

public

enum redactivestatusenum

public string getname()

public

void

setname

(string name)

public integer getvalue()

public

void

setvalue

(integer value)

public

static

void

main

(string[

] args)

}

深入討論C 的enum

呵呵,enum在實際中應用比較少,所以你會忽略它。但是,在這裡,我告訴你,enum 和 struct class一樣,都是使用者自定義型別。對呀!enum是使用者自定義型別,他有資料成員,還有成員函式!for example enum e 那麼 001 enum e e1 enum e不是物件,它是...

深入討論C 的enum

enum的秘密 一 enum是 使用者自定義型別 呵呵,enum在實際中應用比較少,所以你會忽略它。但是,在這裡,我告訴你,enum 和 struct class一樣,都是使用者自定義型別。對呀!enum是使用者自定義型別,他有資料成員,還有成員函式!for example enum e 那麼 00...

深入理解列舉型別enum

問題是git commit amend 引起的。一條commit已經push到遠端develop了,但是後來又在這條commit上進行了amend操作,導致這條commit的雜湊碼發生了變化。並且後續又在這條commit之後進行了n條commit操作。大概的情況畫了個簡圖,如圖所示。下面的綠色就是最...