什么样的数据结构是枚举变量?

时间:2013-12-11 23:01:21

标签: java ruby data-structures token symbols

例如来自Java docs:

public enum Day {
  MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

在Ruby中,我相信这些将是Symbols。来自Ruby-Doc:" Symbol对象代表Ruby解释器中的名称和一些Strings"。这些在Java中是什么以及编译器如何处理它们?作为Token还是参考文字?

3 个答案:

答案 0 :(得分:2)

它们是enum课程的常量实例,如果您有兴趣,请查看javadoc和实际的implementation。所以如果你有这个:

public enum Weekday
{
   MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

它将在内部翻译为:

class Weekday extends Enum
{
  public static final Weekday MONDAY  = new Weekday( "MONDAY",   0 );
  public static final Weekday TUESDAY = new Weekday( "TUESDAY ", 1 );
  // more constants

  private Weekday( String s, int i )
  {
    super( s, i );
  }

  // more methods
}

here示例,抱歉这不是英文资源)

答案 1 :(得分:2)

MONDAYEnum<Day>的一个实例,是Day类的静态最终字段。每个Enum&lt; Day&gt;包含单个字段'String name'。你可以这样做:

 Enum<Day> x = Day.MONDAY;

enum s的实例可以在switch语句中使用,在某些情况下,它们是字符串的类型替换。

枚举也常用于线程安全地创建单例:

enum MySingleton{
    INSTANCE;

    void instanceMethod();
}

答案 2 :(得分:1)

java中的枚举是类enum的对象,如here所述,它们是java中的完整对象

意味着他们可以拥有实例和类方法

您可以在hereherehere中找到generic object ...可以预定义或类型为Object

你可以在java中阅读更多关于Generics的内容来熟悉它