0

我正在关注这本书,并且有一个枚举示例。所以我这样做:

  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 ...
}
4

6 回答 6

1

仔细看。

  • 比较一下:

    class TrafficLight extends enum<Color> 
    

    有了这个

    class Suit extends Enum<Suit>
    

    Java 区分大小写。Enum<Color>并且enum<Color>非常不同。(后者根本是不允许的。)

  • 在您的示例中,您尝试创建一种枚举类型,该类型使用不同的枚举作为类型参数(TrafficLightColor)。在示例代码中,枚举类型对声明和类型参数使用相同的枚举类型 ( Suit)。

  • 你发现这个了吗?

    // pseudo-code only
    

    您不应该期望伪代码能够编译。

于 2013-10-28T11:35:33.497 回答
0

正如您收到的消息所述,无法扩展枚举。

如果你想返回颜色,只需创建一些方法,返回类型将是你的 enum Color

于 2013-10-28T11:29:07.083 回答
0

这本书相当旧(从 2005 年开始),因此使用Oracle Java 教程可能是一个更好的起点。请参阅此处的Enum Types部分。

请参阅 Color 枚举类的扩展示例以打印声明的枚举的所有值。(有关更深入的解释,请查看教程中的 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());
        }
    }
}
于 2013-10-28T12:31:14.467 回答
0

从你的书中:

您可以从以下伪代码中了解枚举是如何在内部定义的,该伪代码显示了上述 Suit 枚举的模拟类定义

这只是为了向您展示 Enum 是如何在内部定义的。

文档

枚举声明定义了一个类(称为枚举类型)。枚举类主体可以包括方法和其他字段。编译器在创建枚举时会自动添加一些特殊方法。例如,它们有一个静态值方法,该方法返回一个数组,该数组按照声明的顺序包含枚举的所有值。

于 2013-10-28T11:34:26.357 回答
0

我的书语法:

...

class Suit extends Enum<Suit> // pseudo-code only

请注意仅伪代码注释。“伪”的意思是“不太真实”。伪代码不是真正的代码,并且(通常)不会编译。我没有这本书,但大概这段代码是为了说明事情是如何在幕后工作的,而不是你可以编译的字面上的代码。

于 2013-10-28T11:34:31.190 回答
0

哦!只是因为 Classes 不能直接扩展 java.lang.Enum。

于 2013-10-28T11:28:02.920 回答