如何使用codeModel生成具有十六进制常量值的int字段
How to generate int field with hex constant vale with codeModel
我正在尝试使用 compile group: 'com.sun.codemodel', name: 'codemodel', version: '2.6'
生成 java 枚举
每个枚举常量都有两个必须设置为 hex/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)
这导致了问题,但是我看不到如何从十六进制值生成需要的整数常量。
是否可以实现我想要的结果?
更新
我有以下驱动代码生成的输入数据
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",""))));
我正在尝试使用 compile group: 'com.sun.codemodel', name: 'codemodel', version: '2.6'
每个枚举常量都有两个必须设置为 hex/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)
这导致了问题,但是我看不到如何从十六进制值生成需要的整数常量。
是否可以实现我想要的结果?
更新
我有以下驱动代码生成的输入数据
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",""))));