[英]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();
阻止您這樣做的主要因素是, this
是final
。 您不能重新分配this
。 這種限制有充分的理由。
但是,即使您可以重新分配this
,您的方法也沒有多大意義,因為只有兩個Entry
實例, ever - Entry.X
和Entry.O
:
枚舉類型除了由其枚舉常量定義的實例外,沒有其他實例。 嘗試顯式實例化枚舉類型是編譯時錯誤
所以如果你這樣做了:
Entry.X.switchEntry();
從那時起,您將無法訪問最初由Entry.X
引用的 object! 因為switchEntry
將Entry.X
設置為Entry.O
! 現在, Entry.X
和Entry.O
都指向同一個對象!
如果我有一個包含getEntry
方法的 class 怎么辦,它返回一個私有字段entry
,沒有一個 setter for entry
。 如果你打電話怎么辦(這是完全有效的 Java 代碼):
getEntry().switchEntry();
那會設置我的私人entry
變量嗎? 如果是這樣,您剛剛破壞了封裝! 或者它會做一些愚蠢的事情,比如getEntry() = Entry.O;
?
您是否看到允許實施switchEntry
的問題?
無論如何,您應該改為編寫一個返回Entry
實例的方法。 然后,您可以在呼叫站點使用=
來分配您喜歡的任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.