使用 javapoet 生成静态 class 初始值设定项
Generating static class initializer using javapoet
是否可以使用 javapoet
生成静态初始化器?请参阅下面我尝试生成的示例:
class Foo {
static int one = 1;
static int two = 2;
static int sum;
static {
sum = one + two;
}
}
我尝试使用 static
修饰符将静态初始值设定项添加为构造函数:
TypeSpec.classBuilder("Foo")
.addField(FieldSpec.builder(int.class, "one", Modifier.STATIC).initializer("1").build())
.addField(FieldSpec.builder(int.class, "two", Modifier.STATIC).initializer("2").build())
.addField(int.class, "sum", Modifier.STATIC)
.addMethod(MethodSpec.constructorBuilder()
.addModifier(Modifier.STATIC)
.addCode("sum = one + two;")
.build())
.build();
但这会生成 static Foo() { ... }
而不是 static {...}
,这是不正确的语法。
有办法吗?
在撰写本文时最新版本 1.0 无法做到这一点。
但是,有一个拉取请求来解决这个问题 (https://github.com/square/javapoet/pull/257),希望在下一个版本(很可能是 1.1 版)之前合并。
是否可以使用 javapoet
生成静态初始化器?请参阅下面我尝试生成的示例:
class Foo {
static int one = 1;
static int two = 2;
static int sum;
static {
sum = one + two;
}
}
我尝试使用 static
修饰符将静态初始值设定项添加为构造函数:
TypeSpec.classBuilder("Foo")
.addField(FieldSpec.builder(int.class, "one", Modifier.STATIC).initializer("1").build())
.addField(FieldSpec.builder(int.class, "two", Modifier.STATIC).initializer("2").build())
.addField(int.class, "sum", Modifier.STATIC)
.addMethod(MethodSpec.constructorBuilder()
.addModifier(Modifier.STATIC)
.addCode("sum = one + two;")
.build())
.build();
但这会生成 static Foo() { ... }
而不是 static {...}
,这是不正确的语法。
有办法吗?
在撰写本文时最新版本 1.0 无法做到这一点。
但是,有一个拉取请求来解决这个问题 (https://github.com/square/javapoet/pull/257),希望在下一个版本(很可能是 1.1 版)之前合并。