相关疑难解决方法(0)

Java枚举和其他类文件

我注意到enums在编译膨胀总大小之后引入了许多额外的类文件(Class $ 1).它似乎附属于甚至使用枚举的每个类,并且这些通常是重复的.

为什么会发生这种情况,并且有一种方法可以在不删除枚举的情况下阻止这种情况

(问题的原因是空间对我来说是非常宝贵的)

编辑

在进一步研究这个问题时,每次在Enum上使用开关时,Sun的Javac 1.6都会创建一个额外的合成类.它使用某种SwitchMap.这个网站有更多信息,这里告诉你如何分析Javac正在做什么.

每次在枚举上使用开关时,额外的物理文件似乎都要付出高昂的代价!

有趣的是,Eclipe的编译器不会生成这些附加文件.我想知道唯一的解决方案是切换编译器吗?

java enums

63
推荐指数
3
解决办法
1万
查看次数

检查Java中是否存在枚举

无论如何通过将枚举与给定的字符串进行比较来检查枚举是否存在?我似乎找不到任何这样的功能.我可以尝试使用该valueOf方法并捕获异常,但我被教导说捕获运行时异常并不是一种好的做法.有人有什么想法吗?

java string enums compare

55
推荐指数
5
解决办法
7万
查看次数

在枚举类型上实现`next`和`previous`的最佳方法是什么?

假设我有一个枚举:

enum E {
    A, B, C;
}
Run Code Online (Sandbox Code Playgroud)

正如所示这个答案lucasmo,枚举值存储在它们初始化的顺序静态数组,你可以在以后检索(的克隆)这个数组E.values().

现在假设我想要实现E#getNext并且E#getPrevious以下所有表达式都评估为true:

E.A.getNext() == E.B
E.B.getNext() == E.C
E.C.getNext() == E.A

E.A.getPrevious() == E.C
E.B.getPrevious() == E.A
E.C.getPrevious() == E.B
Run Code Online (Sandbox Code Playgroud)

我目前的实施getNext如下:

public E getNext() {
    E[] e = E.values();
    int i = 0;
    for (; e[i] != this; i++)
        ;
    i++;
    i %= e.length;
    return e[i];
}
Run Code Online (Sandbox Code Playgroud)

和类似的方法getPrevious.

然而,这段代码充其量似乎很麻烦(例如,"空" for循环,可论证滥用计数器变量,并且最坏的可能是错误的(可能反思).

在Java 7中实现枚举类型的最佳方法getNextgetPrevious …

java optimization enums

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

Proguard不会保留班级成员的枚举

我正在开发一个作为java jar分发的库,我正在运行proguard,以便只暴露所需的接口.我有一个配置类,包含一堆成员变量和一些枚举定义.我的proguard脚本保留了成员变量,但枚举定义正在被混淆.我已经尝试了所有我能想到的强迫proguard保留这些内部定义和公共枚举,但我无法让它工作.

现在我正在使用:

-keep public class com.stuff.MyConfigObject {
    public *;
}

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

如果我尝试:

-keep public enum com.stuff.MyConfigObject.MyEnum
Run Code Online (Sandbox Code Playgroud)

我得到一个模棱两可的错误:"注意:配置引用未知类'com.stuff.MyConfigObject.MyEnum'"

谢谢您的帮助!

java enums proguard

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

如何用Java内部表示枚举?

Java枚举是类.它们被编译为类.

如何编译以下示例?什么是"班级版"?什么是确切的类代码?我想要实际的Java代码.

public enum Ordinals {
    FIRST("st"),
    SECOND("nd"),
    THIRD("rd");
    private String notation;
    private Ordinals(String notation) {
        this.notation = notation;
    }
    public String getNotation() {
        return notation;
    }
}
Run Code Online (Sandbox Code Playgroud)

java enums

15
推荐指数
1
解决办法
5092
查看次数

Java枚举 - 在定义字段之前无法引用该字段

我有一个类似下面的枚举,但是eclipse说每对对方的第一个定义都有错误.

public enum Baz{
  yin(yang),    //Cannot reference a field before it is defined
  yang(yin),
  good(evil),   //Cannot reference a field before it is defined
  evil(good);

  public final Baz opposite;

  Baz(Baz opposite){
    this.opposite = opposite;
  }
}
Run Code Online (Sandbox Code Playgroud)

我想要完成的是能够Baz.something.opposite用来获得相反的对象Baz.something.这有可能的解决方法吗?也许对于一个空的占位符yangbad之前yingood在此示例中定义的?

java enums

8
推荐指数
2
解决办法
4242
查看次数

字符串数组是否可变?

我想知道Java中的String数组是否可变?我知道字符串是不可变的,但字符串数组怎么样?

如果我有一个字符串数组,并更改内容,是否会创建一个新的字符串对象?或者实际值是否会改变?

提前致谢

java arrays string types mutable

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

创建一个数组,其中每个位置都是枚举类型

嗨,我想创建一个数组,其中每个位置由枚举的值表示.

例如:

public enum type{

  green,blue,black,gray;

}
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个阵列,其中每个位置都是绿色,蓝色,......

我会更清楚.我想创建一个数组,其中位置由enum class.instead int []数组表示.[=] int []创建int [] array = new int [type.value]

java arrays enums

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

Enum和enum之间的区别

enum有valueOf(string)获取枚举常量的方法,并且java.lang.Enum类名中valueOf(enumClassName, string) 我所发现的同一类型的方法都给出相同的输出.那么还有什么其他差异.如果没有差异那么为什么JSL添加Enum.valueOf()

enum Season {
    WINTER,SUMMER
}

class Test {
    public static void main(String[] args) {
        String season = "WINTER";

        //switch (Season.valueOf(colObject))  // following line achieves same thing
        switch (Enum.valueOf(Season.class, season)) // any other difference between both approach
        {
            case WINTER: {
                System.out.println("Got it in switch case= VENDOR");
                break;
            }
            default:
                System.out.println("Fell thru.");
                break;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

java enums

4
推荐指数
1
解决办法
2661
查看次数

'this'指针未在Java程序中初始化

我有一个程序如下:

package com.company;

enum Color {
    RED, GREEN;

    Color() {
        System.out.println(Main.getRegionName(this));
    }
}

public class Main {
    public static String getRegionName(Color region) {
        switch (region) {
            case RED:
                return "red";
            case GREEN:
                return "green";
            default:
                return "false";
        }
    }

    public static void main(String[] args) {
        Main m = new Main();
        Color color = Color.RED;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,我得到以下例外:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.company.Main.getRegionName(Main.java:13)
    at com.company.Color.<init>(Main.java:7)
    at com.company.Color.<clinit>(Main.java:4)
    at com.company.Main.main(Main.java:25)
Caused by: java.lang.NullPointerException
    at com.company.Color.values(Main.java:3)
    at com.company.Main$1.<clinit>(Main.java:13)
    ... 4 more …
Run Code Online (Sandbox Code Playgroud)

java

4
推荐指数
1
解决办法
119
查看次数

标签 统计

java ×10

enums ×8

arrays ×2

string ×2

compare ×1

mutable ×1

optimization ×1

proguard ×1

types ×1