我知道在Java中,
enum
常量隐式地是一个static final
变量。但是enum
类可以有一个实例变量,比如说size。所以每个enum
常量都会有一个'size'的副本。
这种情况下的等效Java代码是什么?我是说,似乎静态的enum
常量正在使用一个非静态的实例变量,这在正常情况下是不可能的?enum Members{
A(1),B(2),C(3); // I have 3 enum constants here
private int size;
Members (int size) {
//System.out.println("Initializing var with size = "+size);
}
}
到目前为止,我知道的等价代码如下:
public final class Member extends Enums<Members> {
public static final Members A;
// ...
// What happened to size? How do A,B,C get a copy of size?
}
编辑:重新说明我的问题- 我对编译器背后的实现很感兴趣。我已经知道如何使用枚举。我想知道编译器会做什么?例如,如果我只是写一个A,编译器将其转换为"public static final Member A"。我想知道编译器是如何给每个A、B、C都分配大小的拷贝。
我对编译器的后台实现很感兴趣。我已经知道如何使用枚举,但我想知道编译器的处理方式。例如,如果我只是写一个A,编译器会将其转换为"public static final Member A"。我想知道编译器是如何给每个A、B、C分配大小的拷贝。