-1

我正在尝试使用生成 java 枚举compile group: 'com.sun.codemodel', name: 'codemodel', version: '2.6'

每个枚举常量都有两个 int 参数,它们必须设置为 hex/unicode 值。

我希望生成的代码将类似于此

public enum MY_ENUM {

    VALUE_0000(0x00, 0x0000),
    VALUE_0001(0x01, 0x0001),
    VALUE_0002(0x02, 0x0002),
    VALUE_0003(0x03, 0x0003);

    private final int first;
    private final int second;

    private MY_ENUM(final int first, final int second) {
        this.first = first;
        this.second = second;
    }

    public int get_first() {
        return first;
    }

    public int get_second() {
        return second;
    }

}

目前我能生成的就是这个

public enum MY_ENUM {

    VALUE_0000("0x00", "0x0000"),
    VALUE_0001("0x01", "0x0001"),
    VALUE_0002("0x02", "0x0002"),
    VALUE_0003("0x03", "0x0003");

    private final int first;
    private final int second;

    private MY_ENUM(final int first, final int second) {
        this.first = first;
        this.second = second;
    }

    public int get_first() {
        return first;
    }

    public int get_second() {
        return second;
    }

}

我用来生成每个常量的 codeModel 代码是这样的:-

final String[] rawTextDataParts = rawTextDataLine.split(",");

JEnumConstant enumConst = jDefinedClass.enumConstant(generateEnumConstantName(rawTextDataParts[4]));
enumConst.arg(JExpr.lit(rawTextDataParts[0]));
enumConst.arg(JExpr.lit(rawTextDataParts[1]));

我明白这是我使用的com.sun.codemodel.JExpr方法

public static JExpression lit(String s)

这会导致问题,但是我看不到如何从十六进制值生成需要的整数常量。

是否有可能达到我想要的结果?

更新

我有以下驱动我的代码生成的输入数据

0x00,   0x0000,  VALUE_0000
0x01,   0x0001,  VALUE_0001
0x02,   0x0002,  VALUE_0002
0x03,   0x0003,  VALUE_0003
4

1 回答 1

1

您无需将数字编码为十六进制常量。平原ints会做,即

VALUE_0000(0,0) // identical to VALUE_0000(0x00, 0x0000)

尝试这个:

enumConst.arg(JExpr.lit(Integer.parseInt(rawTextDataParts[0].replaceAll("0x",""))));
enumConst.arg(JExpr.lit(Integer.parseInt(rawTextDataParts[1].replaceAll("0x",""))));
于 2018-01-05T08:41:41.960 回答