更改枚举';在JAVA中使用此函数在ENUM类函数中设置s值

更改枚举';在JAVA中使用此函数在ENUM类函数中设置s值,java,oop,enums,syntax-error,Java,Oop,Enums,Syntax Error,我有一个名为entry的Java枚举。我的目标是创建一个函数,将枚举值更改为另一个值。如果我的枚举值是X,我希望它变成Y,反之亦然。我试着写的代码在这里。但这不会编译,它说变量应该在我使用this的地方出现 public enum Entry { X, O; public void switchEntry(){ this == Entry.X? this = Entry.O: Entry.X ; } } 另外,我想知道在我的ENUM类中是否可以

我有一个名为entry的Java枚举。我的目标是创建一个函数,将枚举值更改为另一个值。如果我的枚举值是X,我希望它变成Y,反之亦然。我试着写的代码在这里。但这不会编译,它说变量应该在我使用
this
的地方出现

public enum Entry {
    X,
    O;

    public void switchEntry(){
        this == Entry.X? this = Entry.O: Entry.X ;
    }
}
另外,我想知道在我的ENUM类中是否可以不使用额外的值变量。
非常感谢。如果这是一个愚蠢的问题,请道歉。

您不能将一个枚举更改为另一个枚举。但是,您可以更新枚举变量以引用另一个枚举值

公共枚举条目{
X,,
O;
公共条目switchEntry(){
返回(this==X?O:X);
}
}
Entry e=Entry.X;
e=e.开关输入();

不能将一个枚举更改为另一个枚举。但是,您可以更新枚举变量以引用另一个枚举值

公共枚举条目{
X,,
O;
公共条目switchEntry(){
返回(this==X?O:X);
}
}
Entry e=Entry.X;
e=e.开关输入();

无法切换枚举本身的值。您可以做的是在类中使用枚举并在其中切换值:

类测试{
私有条目=条目.X;
公共条目(){
entry=entry==entry.X?entry.O:entry.X;
}
}
枚举项{
十、 O;
}

无法切换枚举本身的值。您可以做的是在类中使用枚举并在其中切换值:

类测试{
私有条目=条目.X;
公共条目(){
entry=entry==entry.X?entry.O:entry.X;
}
}
枚举项{
十、 O;
}

阻止你这么做的主要原因是
这是
最终的
。您不能重新分配

但是,即使您可以重新分配
,您的方法也没有多大意义,因为只有两个
条目
实例,即ever-
Entry.X
Entry.O

枚举类型除了由其枚举常量定义的实例外,没有其他实例。尝试显式实例化枚举类型是编译时错误

因此,如果你这样做了:

Entry.X.switchEntry();
从该点开始,您将无法访问最初由
Entry.X
引用的对象!因为
switchEntry
Entry.X
设置为
Entry.O
!现在
Entry.X
Entry.O
都指向同一个对象

如果我有一个包含
getEntry
方法的类,该类返回一个私有字段
entry
,而没有
entry
的setter,该怎么办。如果调用(这是非常有效的Java代码),会怎么样

这会设置我的私有
条目
变量吗?如果是这样的话,您刚刚破坏了封装!或者它会做一些愚蠢的事情,比如
getEntry()=Entry.O

您是否看到允许您实现
开关条目
的问题


无论如何,您应该编写一个返回
Entry
实例的方法。然后,您可以在呼叫站点使用
=
来分配您喜欢的任何内容。

阻止您这样做的主要原因是
最终
。您不能重新分配

但是,即使您可以重新分配
,您的方法也没有多大意义,因为只有两个
条目
实例,即ever-
Entry.X
Entry.O

枚举类型除了由其枚举常量定义的实例外,没有其他实例。尝试显式实例化枚举类型是编译时错误

因此,如果你这样做了:

Entry.X.switchEntry();
从该点开始,您将无法访问最初由
Entry.X
引用的对象!因为
switchEntry
Entry.X
设置为
Entry.O
!现在
Entry.X
Entry.O
都指向同一个对象

如果我有一个包含
getEntry
方法的类,该类返回一个私有字段
entry
,而没有
entry
的setter,该怎么办。如果调用(这是非常有效的Java代码),会怎么样

这会设置我的私有
条目
变量吗?如果是这样的话,您刚刚破坏了封装!或者它会做一些愚蠢的事情,比如
getEntry()=Entry.O

您是否看到允许您实现
开关条目
的问题


无论如何,您应该编写一个返回
Entry
实例的方法。然后,您可以在调用站点使用
=
分配您喜欢的任何内容。

@Jens有时您可能希望在两个值之间切换,例如
黑色
白色
,就像一个棋盘,或者像一个电子开关一样打开和关闭。@Jens有时你可能想在两个值之间切换,比如像一个棋盘一样打开和关闭黑色和白色,或者像一个电子开关一样打开和关闭。