簡體   English   中英

在 ENUM class function 中使用 JAVA 更改 ENUM 的值

[英]Change ENUM's value inside the ENUM class function using this in JAVA

我有一個名為 entry 的 Java 枚舉。 我的目標是擁有一個 function 它將枚舉值更改為另一個。 如果我的枚舉值為 X,我希望它變為 Y,反之亦然。 我嘗試編寫的代碼在這里。 但這不會編譯,並且它說在我使用this的地方期望變量。

public enum Entry {
    X,
    O;

    public void switchEntry(){
        this == Entry.X? this = Entry.O: Entry.X ;
    }
}

另外我想知道是否可以在我的 ENUM class 中不使用附加值變量。 謝謝你。 抱歉,如果這是一個愚蠢的問題。

您不能切換枚舉本身的值。 您可以做的是使用 class 中的枚舉並使用其中的值:

class Test {

    private Entry entry = Entry.X;

    public void switchEntry() {
        entry = entry == Entry.X ? Entry.O : Entry.X;
    }
}

enum Entry {
    X, O;
}

您不能將一個枚舉更改為另一個枚舉。 但是,您可以更新枚舉變量以引用另一個枚舉值。

public enum Entry {
    X,
    O;

    public Entry switchEntry() {
        return (this == X ? O : X);
    }
}
Entry e = Entry.X;

e = e.switchEntry();

阻止您這樣做的主要因素是, thisfinal 您不能重新分配this 這種限制有充分的理由

但是,即使您可以重新分配this ,您的方法也沒有多大意義,因為只有兩個Entry實例, ever - Entry.XEntry.O

§8.9

枚舉類型除了由其枚舉常量定義的實例外,沒有其他實例。 嘗試顯式實例化枚舉類型是編譯時錯誤

所以如果你這樣做了:

Entry.X.switchEntry();

從那時起,您將無法訪問最初由Entry.X引用的 object! 因為switchEntryEntry.X設置為Entry.O 現在, Entry.XEntry.O都指向同一個對象!

如果我有一個包含getEntry方法的 class 怎么辦,它返回一個私有字段entry ,沒有一個 setter for entry 如果你打電話怎么辦(這是完全有效的 Java 代碼):

getEntry().switchEntry();

那會設置我的私人entry變量嗎? 如果是這樣,您剛剛破壞了封裝! 或者它會做一些愚蠢的事情,比如getEntry() = Entry.O; ?

您是否看到允許實施switchEntry的問題?

無論如何,您應該改為編寫一個返回Entry實例的方法。 然后,您可以在呼叫站點使用=來分配您喜歡的任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM