我的枚举有什么问题?

时间:2013-10-28 11:26:20

标签: java enumeration

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

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

6 个答案:

答案 0 :(得分:1)

仔细看。

  • 比较一下:

    class TrafficLight extends enum<Color> 
    

    用这个

    class Suit extends Enum<Suit>
    

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

  • 在您的示例中,您尝试创建一个枚举类型,该类型对类型参数使用不同的枚举(TrafficLightColor)。在示例代码中,枚举类型对声明和类型参数使用相同的枚举类型(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());
        }
    }
}