java – 为什么为每个枚举类型创建不同的类文件,如果它们具有常量特定的方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 为什么为每个枚举类型创建不同的类文件,如果它们具有常量特定的方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1484字,纯文字阅读大概需要3分钟。
内容图文
我有一个枚举
enum OperationsType {
ADD("+"), SUB("-"), DIV("/"), MUL("*");
private String opcodes;
private OperationsType(String opcodes) {
this.opcodes = opcodes;
}
public String toString() {
return this.opcodes;
}
}
这里所有枚举类型都没有任何常量的特定方法,因此javac只为枚举创建一个类文件
OperationsType.class
但如果我在所有枚举类型的相同代码中添加常量Specific方法,则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);
}
所以我怀疑为什么编译器为每个枚举类型创建了4个不同的类,如果它们具有常量的特定方法但是如果它们没有常量的特定方法则不创建不同的类?
解决方法:
具有常量特定方法的枚举是使用匿名内部类实现的.如The Java Language Specification中所述:
The optional class body of an enum constant implicitly defines an
anonymous class declaration (07001) that extends the immediately
enclosing enum type. The class body is governed by the usual rules of
anonymous classes; in particular it cannot contain any constructors.
匿名内部类是通过创建类名为OuterClass $1,OuterClass $2等的类文件来实现的,这正是枚举的情况.
内容总结
以上是互联网集市为您收集整理的java – 为什么为每个枚举类型创建不同的类文件,如果它们具有常量特定的方法?全部内容,希望文章能够帮你解决java – 为什么为每个枚举类型创建不同的类文件,如果它们具有常量特定的方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。