我正在关注这本书,有一个枚举的例子。所以我这样做:
enum Color {
GREEN("GREEN"),
YELLOW("YELLOW"),
RED("RED");
String name;
Color(String name) {
this.name = name;
}
public String getColor() {
return name;
}
}
然后我想创建对象并通过我的类返回颜色:
class TrafficLight extends enum<Color> { // I am getting an error:
// Classes cannot directly extend java.lang.Enum
// ...create objects and etc.
}
如何修复此错误?因为这与我的书中的语法完全相同,并且不知道如何使其正确。
编辑:我的书语法:
enum Suit {
CLUBS("CLUBS"),
DIAMONDS("DIAMONDS"),
HEARTS("HEARTS"),
SPADES("SPADES");
String name;
Suit(String name) { this.name = name; }
public String toString() { return name; }
}
class Suit extends Enum<Suit> // pseudo-code only
implements Comparable<Suit>, Serializable {
public static final Suit CLUBS = new Suit("CLUBS");
public static final Suit DIAMONDS = new Suit("DIAMONDS");
public static final Suit HEARTS = new Suit("HEARTS");
public static final Suit SPADES = new Suit("SPADES");
String name;
Suit(String name) { this.name = name; }
public String toString() { return name; }
// ... compiler generated methods ...
}
答案 0 :(得分:1)
仔细看。
比较一下:
class TrafficLight extends enum<Color>
用这个
class Suit extends Enum<Suit>
Java区分大小写。 Enum<Color>
和enum<Color>
非常不同。 (后者根本不被允许。)
在您的示例中,您尝试创建一个枚举类型,该类型对类型参数使用不同的枚举(TrafficLight
和Color
)。在示例代码中,枚举类型对声明和类型参数使用相同的枚举类型(Suit
)。
你有没有发现这个?
// pseudo-code only
您不应该期望伪代码进行编译。
答案 1 :(得分:0)
哦!它只是因为Classes不能直接扩展java.lang.Enum。
答案 2 :(得分:0)
无法扩展枚举,因为您会收到消息。
如果你想返回一个颜色,只需创建一些方法,返回类型将是你的枚举Color
。
答案 3 :(得分:0)
从你的书中:
您可以了解内部如何定义枚举 在伪代码之后,它显示了一个模拟类定义 以上诉讼enum
这只是为了向您展示如何在内部定义Enum。
来自doc:
枚举声明定义了一个类(称为枚举类型)。枚举 类体可以包括方法和其他字段。编译器 在创建枚举时自动添加一些特殊方法。对于 例如,它们有一个返回数组的静态值方法 按顺序包含枚举的所有值 声明。
答案 4 :(得分:0)
我的书语法:
...
class Suit extends Enum<Suit> // pseudo-code only
请注意仅限伪代码注释。 “伪”意味着“不太真实”。伪代码不是真正的代码,也不会(通常)编译。我没有这本书,但可能这段代码是为了说明幕后的工作原理,而不是你可以编译的字面代码。
答案 5 :(得分:0)
这本书相当陈旧(从2005年开始),因此使用Oracle Java Tutorial可能是一个更好的起点。请参阅此处的Enum Types部分。
请参阅Color enum类的扩展示例,以打印声明的枚举的所有值。 (有关深入解释的更多内容,请参阅教程中的Planet示例)
enum Color {
GREEN("green"),
YELLOW("yellow"),
RED("red");
private final String name;
Color(String name) {
this.name = name;
}
public String getColor() {
return name;
}
}
class Main {
public static void main(String[] args) {
for (Color color : Color.values()) {
System.out.printf("enum class: %-6s value: %s%n", color, color.getColor());
}
}
}