对于以下TypeAndSize
班级,
class TypeAndSize {
Species type; // runType EMPTY, SHARK, or FISH
int size; // Number of cells in the run for that runType.
enum Species{EMPTY,SHARK,FISH}
/**
* Constructor for a TypeAndSize of specified species and run length.
* @param species is Ocean.EMPTY, Ocean.SHARK, or Ocean.FISH.
* @param runLength is the number of identical cells in this run.
* @return the newly constructed Critter.
*/
TypeAndSize(Species species, int runLength) {
if (species == null) {
System.out.println("TypeAndSize Error: Illegal species.");
System.exit(1);
}
if (runLength < 1) {
System.out.println("TypeAndSize Error: runLength must be at least 1.");
System.exit(1);
}
this.type = species;
this.size = runLength;
}
}
在下面的代码中使用enum
类类型的成员字段,
class RunLengthEncoding {
...
public RunLengthEncoding(int i, int j, int starveTime) {
this.list = new DList2();
this.list.insertFront(TypeAndSize.Species.EMPTY, i*j);
....
}
...
}
让我问这个问题。
我的问题:
为什么enum
类的成员字段被设计为enum
的实例?因为传递enum
类类型的参数很容易,它可以向后兼容C语言中enum
的旧概念,它是常量的集合?那是什么原因吗?
答案 0 :(得分:2)
您所谈论的内容(TypeAndSize.Species.EMPTY
)不是Spicies
的成员字段。当我们谈论“成员字段”时,它通常意味着实例变量(在Java中也可以用enum
编写)。
在您要问的方面,您可以简单地将enum解释为使用类常量编写特殊类的特殊简写:
enum Foo {
A,
B;
}
类似于
class Foo {
public static final Foo A = new Foo();
public static final Foo B = new Foo();
private Foo() {}
}
(枚举和手工制作课程之间仍有很多区别,但它们还不是你的关注点)
答案 1 :(得分:1)
使用枚举类类型的成员字段
TypeAndSize.Species.EMPTY
未使用成员字段。它访问TypeAndSize中定义的枚举类型。
Species type
正在定义一个成员字段,但它的类型不是枚举,它的类型是Species。
Enum与类和接口处于同一级别。这些是我们可以使用的构建块类型。我们想要在整数常量上使用枚举的原因可以是elsewhere。
希望链接链接有助于回答问题的第二部分 我已尽力清理问题中使用的术语。