我有一个枚举
enum OperationsType {
ADD("+"), SUB("-"), DIV("/"), MUL("*");
private String opcodes;
private OperationsType(String opcodes) {
this.opcodes = opcodes;
}
public String toString() {
return this.opcodes;
}
}
这里所有的枚举类型没有任何constant Specific method
这样javac
的是只创建一个类文件enum
作为
OperationsType.class
但是,如果我constant Specific method
为所有枚举类型添加相同的代码,则将javac
创建5个类文件。
Operations.class
Operations$1.class
Operations$2.class
Operations$3.class
Operations$4.class
对于下面的代码
enum Operations {
ADD("+") {
public double apply(double a, double b) {
return a + b;
}
},
SUB("-") {
public double apply(double a, double b) {
return a - b;
}
},
DIV("/") {
public double apply(double a, double b) {
return a / b;
}
},
MUL("*") {
public double apply(double a, double b) {
return a * b;
}
};
private String opcodes;
private Operations(String opcodes) {
this.opcodes = opcodes;
}
public abstract double apply(double a, double b);
}
所以我怀疑为什么要compiler
为每个人创建4个不同的类,而enum type
如果constant Specific method
没有则不创建不同的类constant Specific method
呢?
具有特定于常量的方法的枚举是使用匿名内部类实现的。如Java语言规范中所述:
枚举常量的可选类主体隐式定义了一个匿名类声明(第15.9.5节),该声明扩展了直接封闭的枚举类型。类主体受匿名类的通常规则约束;特别是它不能包含任何构造函数。
匿名内部类是通过与像名字创建的类文件执行OuterClass$1
,OuterClass$2
等等,这是枚举的情况下,究竟发生了什么。
我听到一些人建议在C++中使用枚举类,因为它们的类型安全。 但这到底意味着什么呢?
枚举类(“新的枚举”/“强类型的枚举”)主要用来解决传统的C++枚举的三个问题: 传统C++枚举会被隐式转换为int,这在那些不应被转换为int的情况下可能导致错误 传统C++枚举的每一枚举值在其作用域范围内都是可见的,容易导致名称冲突(同名冲突) 不可以指定枚举的底层数据类型,这可能会导致代码不容易理解、兼容性问题以及不可以进行前向声明 枚举类(enum)(“强类型枚举”)是强类型的,并且具有类
问题内容: Java枚举很棒。泛型也是如此。当然,由于类型擦除,我们都知道后者的局限性。但是有一件事我不理解,为什么我不能创建这样的枚举: 这样,该通用类型参数又可以在各个地方使用。想象一下方法的通用类型参数: 甚至在枚举类本身中: 更具体的例子#1 由于上面的示例对于某些人来说似乎太抽象了,因此下面是一个更现实的示例,说明了为什么要执行此操作。在这个例子中我想使用 枚举,因为这样我就可以枚举一组
问题内容: 假设我有一个抽象类 我有一些特定的培训师,例如: 这些“训练者”中的每一个都有一套固定的技巧,他们可以训练动物去做,我想用枚举来做。所以我有一个接口: 在每个培训师中,我都有一个实现此接口的枚举。所以: 现在,在每个Trainer类中,我想要一个方法“ trainingComplete”,该方法以枚举之一作为输入并将其保存到集合中。所以 但是,我不想在每个特定的培训师中定义“完成”集,
问题内容: Scala没有enumJava所具有的类型安全的。给定一组相关的常数,Scala中代表这些常数的最佳方法是什么? 问题答案: http://www.scala-lang.org/docu/files/api/scala/Enumeration.html 使用范例