public enum Operations {
SINGLE,
MULTIPLE;
private Type operation;
public void setOperation(Type operation) {
this.operation = operation;
}
public Type getOperation() {
return operation;
}
public static void main(String[] args) {
Operations oper1 = Operations.SINGLE;
oper1.setOperation(Type.GET);
Operations oper2 = Operations.SINGLE;
oper2.setOperation(Type.POST);
System.out.println(oper1.getOperation());
System.out.println(oper2.getOperation());
}
}
enum Type {
POST,
GET;
}
在上面的代码中,两个操作的操作值都会更改。如何有两个具有不同操作类型的Operations.SINGLE实例?
是的,实例是隐式的static
和final
。这意味着代码是不明智的。想象两个线程都在调用SINGLE.setOperation(Type)
;您将不会对自己的通话充满信心。
根据Java语言规范的8.9节:
枚举类型(§8.9)不能声明为抽象;这样做会导致编译时错误。
枚举类型是隐式最终的,除非它包含至少一个具有类主体的枚举常量。
显式声明枚举类型为final是编译时错误。
嵌套枚举类型是隐式静态的。允许显式声明嵌套枚举类型为静态。
在下一节中:
枚举类型的主体可以包含枚举常量。枚举常量定义枚举类型的实例。
因为每个枚举常量只有一个实例,所以在比较两个对象引用时,如果已知其中至少有一个引用枚举常量,则可以使用==运算符代替equals方法。
问题内容: 我正在查看公司其他部门维护的一些Java代码,顺便说一下,这是一些前C和C ++开发人员所维护的。普遍存在的一件事是使用静态整数常量,例如 除了缺少“最终”限定符外,这种代码也让我有些不安。我本来希望看到的是,从学校开始主要接受Java的培训,这会更像 但是,论点使我失望。为什么要比后者更好呢? 问题答案: 为什么要比后者更好呢? 这样做要好得多,因为它可以为您提供类型安全性并具有自记
问题内容: Java中的静态和非静态枚举有什么区别?两种用法是相同的。 正确吗 所有静态的都在启动时加载到内存中,非静态的则按需加载 ? 如果是,那么哪种方法更好?将某些数据始终保留在内存中还是每次使用服务器资源加载它们? 问题答案: 所有的都是有效的。如果您有嵌套的枚举,则它与相同。 所有类都是延迟加载的(枚举或其他),但是在加载时,它们会一次全部加载。也就是说,您不能加载一些常量,而不能加载其
问题内容: 我有一个枚举类型类: 如您在上面看到的,我定义了一种具有value的类型。它包含一个特定于常数的主体。在其主体中,我尝试调用 ,但出现编译错误: 无法静态引用非静态方法printMe()。 为什么会出现此错误?我的意思是我在体内重写了一种抽象方法。为什么在范围内?如何摆脱它? 我知道在上添加关键字可以解决问题,但是我想知道是否还有其他方法可以保持非静态状态吗? 另一个问题,与上面的问题
问题内容: 我已经阅读了该问题和答案: 在Java中实现常量的最佳方法是什么? 并提出了一个决定,即枚举是实现一组常量的更好方法。另外,我在Sun网站上阅读了一个如何将行为添加到枚举的示例(请参见前面提到的文章中的链接)。因此,将带有String键的构造函数添加到枚举中以容纳一堆String值没有问题。 这里的唯一问题是,我们需要添加“ .nameOfProperty”来访问String值。因此,
问题内容: 我似乎无法像从内部类内部那样从枚举内部访问周围类的实例成员。这是否意味着枚举是静态的?是否可以访问周围类的实例的范围,还是必须在需要的地方将实例传递给枚举的方法? 问题答案: 是的,嵌套枚举是隐式静态的。 嵌套枚举类型是隐式静态的。可以将嵌套枚举类型显式声明为静态。a
问题内容: 有什么方法可以在Java枚举声明中定义静态最终变量(有效常量)? 我想要在一个地方定义BAR(1 … n)值的字符串文字值: 对于以上代码,我收到以下错误消息: 在定义字段之前无法引用它 。 问题答案: 正如IntelliJ IDEA建议的那样,在提取常量时-制作静态嵌套类。此方法有效: