Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用codeModel生成十六进制常量值的int字段_Java_Sun Codemodel - Fatal编程技术网

Java 如何使用codeModel生成十六进制常量值的int字段

Java 如何使用codeModel生成十六进制常量值的int字段,java,sun-codemodel,Java,Sun Codemodel,我正在尝试使用编译组:“com.sun.codemodel”,名称:“codemodel”,版本:“2.6”,生成java枚举。 每个枚举常量都有两个必须设置为十六进制/unicode值的int参数 我希望生成的代码与此类似 public enum MY_ENUM { VALUE_0000(0x00, 0x0000), VALUE_0001(0x01, 0x0001), VALUE_0002(0x02, 0x0002), VALUE_0003(0x03, 0x0

我正在尝试使用编译组:“com.sun.codemodel”,名称:“codemodel”,版本:“2.6”,生成java枚举。

每个枚举常量都有两个必须设置为十六进制/unicode值的int参数

我希望生成的代码与此类似

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)
这导致了问题,但是我看不到如何从十六进制值生成require integer常量

有可能达到我想要的结果吗

更新

我有以下输入数据,这些数据驱动着我的代码生成

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

您不需要将数字编码为十六进制常量。简单的
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",""))));

我已经更新了我的问题,使用您的代码和我的输入数据在线程“main”java.lang.NumberFormatException中给出异常:对于输入字符串:“0x00”位于java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)位于java.lang.Integer.parseInt(Integer.java:580)位于java.lang.Integer.parseInt(Integer.java:615)由于我的输入数据由十六进制值组成,我需要修改对enumcont.arg的修复(JExpr.lit(Integer.parseInt(rawTextDataParts[0].replaceAll(“0x”,”),16));arg(JExpr.lit(Integer.parseInt(rawTextDataParts[1].replaceAll(“0x”),16));您是否考虑使用整数?解码?这样你就不必编辑字符串了。为什么要否决这个问题?下次请留下评论。