【问题标题】:Simple Enum dilemma [closed]简单枚举困境[关闭]
【发布时间】:2012-12-09 03:03:23
【问题描述】:

所以当我使用一些 API 时,我发现它们可以通过 ex:Settings.MAIN_SCREEN 返回一些整数,并且可能返回 1。我假设Settings 是一个枚举,但我不知道如何从枚举构造函数返回一个变量。我能做的就是Settings.MAIN_SCREEN.getId()

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

【问题讨论】:

  • 为什么你认为它的枚举?我会说Settings 是具有常量public static final int MAIN_SCREEN = 1 的普通类。

标签: java enums


【解决方案1】:

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

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

另一方面,枚举是对象,正如您所指出的,您必须有一个访问器才能将整数值与一个相关联。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      现有的答案是正确的;正如他们都说的那样,您看到的可能不是枚举,而实际上是某个对象中的常量静态值。不管怎样,我想我也可以添加一些可能有帮助的东西。枚举类似于对象,因为它们可以具有构造函数和成员字段,但是构造函数不能被外部访问。 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.
      

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

      【讨论】:

        猜你喜欢
        • 2011-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多