【问题标题】:Why do I have to create an instance of an enum in Java?为什么我必须在 Java 中创建枚举的实例?
【发布时间】:2016-10-01 05:47:45
【问题描述】:

我是 Java 新手,即使这个问题看起来很简单,我似乎也找不到答案。

我来自 C 背景,习惯于创建枚举并通过像这样调用枚举的名称来使用它们...

enum Security_Levels 
        { 
          black_ops, 
          top_secret, 
          secret, 
          non_secret 
        }; 

所以我可以使用 black_ops,我会得到一个 0。

在 Java 中,您可以在单独的文件夹中定义一个枚举并将其导入到您想要使用它的位置。但与 C 不同的是,我不能对枚举对象进行简单的调用。

public enum GroupID
{
    camera,
    projector,
    preview,
    slr,
    led
}

当我尝试调用预览时它不起作用...我必须创建枚举对象的实例

GroupID egroupid_preview = GroupID.preview;

那么即使我创建了一个实例,我也必须创建公共函数来访问下面的值。

public enum GroupID
{
    camera(1),
    projector(2),
    preview(3),
    slr(4),
    led(5);

    private int val;

    private GroupID(int val) {
        this.val = val;
    }
    int getVal() {
        return val;
    }
}

是我做错了,还是 java 让访问枚举变得如此困难?

【问题讨论】:

  • “我必须创建枚举对象的实例”——这不是创建实例。 “我必须创建公共函数才能访问该值”——这是因为 enum 不必具有任何类型的“值”,并且该值不必是 int
  • 您将枚举视为一个 int,但这实际上并不是 Java 中的内容。枚举对象。
  • 那么你不能像在C中那样在Java中使用枚举吗?如果您必须定义每个项目,那么 Java 中的枚举有什么意义?
  • 是的,你不能像使用 C 一样使用 Java。

标签: java android enums


【解决方案1】:

Java 枚举器是特殊的静态对象,默认情况下不包含任何值。它们通常按名称使用:

enum Foo
{
    foo,
    bar,
    oof;
}

public void func(Foo arg)
{
    if(arg == Foo.bar)
        // do bar code

    switch(arg)
    {
        case foo: // do foo code
        case oof: // do oof code
    }
}

如果您需要枚举中的实际值,您可以将其与您自己制作的函数一起使用,或者执行以下操作:

enum Foo
{
    foo (1),
    bar (2),
    oof (3);

    public final int val;

    Foo(int val)
    {
        this.val = val;
    }
}

public static void main( String[] args )
{
    Foo f = Foo.bar;

    int val = f.val;
}

【讨论】:

  • 我发现枚举的 name() 函数很有用。
猜你喜欢
  • 2010-09-24
  • 2017-04-24
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
相关资源
最近更新 更多