如何在android中使用Enums?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

我几乎完成了一个计算活动,我正在使用android为我的应用程序。我尝试创建Gender Enum,但出于某种原因出现语法错误,请插入“EnumBody”以完成EnumDeclaration:

public static enum Gender
{
    static
    {
        Female = new Gender("Female", 1);
        Gender[] arrayOfGender = new Gender[2];
        arrayOfGender[0] = Male;
        arrayOfGender[1] = Female;
        ENUM$VALUES = arrayOfGender;
    }
}

提问于
用户回答回答于

你到底在哪里找到这个语法?Java Enums非常简单,你只需指定值:

public enum Gender {
   MALE,
   FEMALE
}

如果你希望它们更加复杂,你可以像这样给它们添加值:

public enum Gender {
    MALE("Male", 0),
    FEMALE("Female", 1);

    private String stringValue;
    private int intValue;
    private Gender(String toString, int value) {
        stringValue = toString;
        intValue = value;
    }

    @Override
    public String toString() {
        return stringValue;
    }
}

然后使用枚举,你会做这样的事情:

Gender me = Gender.MALE
用户回答回答于

围绕这个争论点已经有一些争论,但即使在最新的文档中,android也暗示在android应用程序中使用枚举不是一个好主意。原因是因为它们比静态常量变量占用更多的内存。以下是2014年的一篇文章,建议不要在Android应用程序中使用枚举。

我引用:

注意内存开销 了解您使用的语言和库的成本和开销,并在设计应用程序时始终记住这些信息。通常情况下,表面看起来无害的东西实际上可能有大量的开销。例子包括:

  • 枚举通常需要比静态常量多两倍的内存。你应该严格避免在Android上使用枚举。
  • Java中的每个类(包括匿名内部类)都使用约500字节的代码。
  • 每个类实例都有12-16字节的RAM开销。
  • 将单个条目放入HashMap需要分配一个额外的32个字节的条目对象(请参阅前面关于优化数据容器的部分)。

几个字节在这里和那里快速添加应用程序设计,类或对象将会遭受这种开销。这会让你处于堆分析的难题,并意识到你的问题是很多使用你的RAM的小对象。

扫码关注云+社区