简单的Enum困境

时间:2012-12-09 03:03:24

标签: java enums

因此,当我使用某些API时,我发现他们可以通过ex:Settings.MAIN_SCREEN返回一些整数,这可能会返回1。我假设Settings是一个枚举,但我无法弄清楚如何从Enum构造函数返回一个变量。我所能做的就是Settings.MAIN_SCREEN.getId()

如果有人知道该怎么做,请分享

3 个答案:

答案 0 :(得分:2)

枚举不能“成为”或“返回”整数类型。

在Java有枚举之前,有一个常见的约定,即使接口充满命名常量。那些可以有任何类型。

另一方面,枚举是对象,你必须有一个存取器,如你所知,将一个整数值与一个值相关联。

答案 1 :(得分:1)

请提供您正在使用的API的实际示例(例如,指向其JavaDoc的链接)。

根据你的写作,我认为Settings.MAIN_SCREEN实际上不是一个枚举,而是一个常数,仅此而已:

public class Settings {
    public static final int MAIN_SCREEN = 1;
}

答案 2 :(得分:0)

现有的答案是正确的;正如他们所说的那样,你所看到的可能不是一个枚举,但事实上在某个对象中是一个恒定的静态值。无论我以为我可能会添加其他可能有用的东西。枚举类似于对象,因为它们可以具有构造函数和成员字段,但是无法从外部访问构造函数。 Check out the documentation for more info.

要假设地回答你的问题,你可以这样做:

public enum Settings{
    MAIN_SCREEN(1) // internally invoking this enum's constructor, passing the value 1.

    private int id;        

    private Settings(int id){
        this.id= id;
    }

    public int getId(){
        return this.id;
    }
}

在代码的某处,您可以这样做:

Settings.MAIN_SCREEN.getId() // this will return the value 1, as specified in the enumeration.

据我所知,没有使用此方法直接从枚举中获取整数值,因为枚举本身是在内部维护的。您可以将Enum的名称作为字符串(getName())获取。如果你提到的这个设置的东西来自一个对你不开心的第三方api,那么你可能就在这个上面了。