我有一个名为entry的java枚举。我的目标是创建一个函数,将枚举值更改为另一个值。如果我的枚举值是x,我希望它变成y,反之亦然。我试着写的代码在这里。但这不会编译,它说变量应该在我使用的地方 this
.
public enum Entry {
X,
O;
public void switchEntry(){
this == Entry.X? this = Entry.O: Entry.X ;
}
}
我还想知道是否可以不在枚举类中使用附加值变量。谢谢您。如果这是个愚蠢的问题,我道歉。
3条答案
按热度按时间bpzcxfmw1#
不能切换枚举本身的值。您可以在类中使用枚举,并在其中切换值:
fcipmucu2#
不能将一个枚举更改为另一个枚举。但是,可以更新枚举变量以引用另一个枚举值。
ogsagwnx3#
阻止你这么做的主要原因是
this
是final
. 你不能重新分配this
. 这种限制是有充分理由的。但是,即使你可以重新分配
this
,您的方法没有多大意义,因为只有两个Entry
,曾经-Entry.X
以及Entry.O
:§8.9
枚举类型除了由其枚举常量定义的示例外,没有其他示例。试图显式示例化枚举类型是编译时错误
如果你真的这么做了:
您将无法访问最初由引用的对象
Entry.X
从那以后!因为switchEntry
套Entry.X
至Entry.O
! 现在两者都有了Entry.X
以及Entry.O
指的是同一个对象!如果我有一个包含
getEntry
方法返回一个私有字段entry
,没有为entry
. 如果调用了(这是完全有效的java代码):那会不会把我的隐私
entry
变量?如果是这样的话,你刚刚破坏了封装!或者它会做一些愚蠢的事情,比如getEntry() = Entry.O;
?您是否看到了允许您实现
switchEntry
?无论如何,您应该编写一个返回
Entry
. 然后你可以使用=
在呼叫站点分配给你喜欢的任何东西。