使用javapoet生成静态类初始值设定项

时间:2015-04-23 16:00:55

标签: java code-generation 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 :(得分:2)

这不能用版本1.0完成,这是编写本文时的最新版本。

但是,有一个拉取请求来解决这个问题(https://github.com/square/javapoet/pull/257),希望在下一个版本之前合并(很可能是版本1.1)。