相关疑难解决方法(0)

如何为Java 6枚举实现values()?

在Java中,您可以按如下方式创建枚举:

public enum Letter {
    A, B, C, D, E, F, G;

    static {
       for(Letter letter : values()) {
          // do something with letter
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个问题涉及"values()"方法.具体来说,它是如何实现的?通常,我可以在Eclipse中使用F3或CTRL + Click跳转到Java类的源代码(即使对于String,Character,Integer甚至Enum这样的类).可以查看其他枚举方法的来源(例如,valueOf(String)).

"values()"每次调用时都会创建一个新数组吗?如果我将它分配给局部变量然后修改其中一个元素,会发生什么(显然这不会影响values()返回的值,这意味着每次都会分配一个新数组).

它的代码是原生的吗?或者JVM /编译器是否专门处理它,只有当它无法证明它不会被修改时才从values()返回一个新实例.

java enums

66
推荐指数
1
解决办法
2万
查看次数

android - 如何从proguard保持枚举

在我的proguard中,我有以下内容来防止公共枚举被混淆.

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这是否也将公共枚举货币保存在这样的类中?

public class Foo {
    public enum **Currency** {PENNY, NICKLE, DIME, QUARTER};

    ...
}
Run Code Online (Sandbox Code Playgroud)

如果没有,我必须单独添加什么?

添加以下内容似乎没有帮助.

-keepattributes InnerClasses
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢

enums android proguard

10
推荐指数
2
解决办法
9530
查看次数

标签 统计

enums ×2

android ×1

java ×1

proguard ×1