【问题标题】:How do I get JavaPoet to generate a class literal?如何让 JavaPoet 生成类文字?
【发布时间】:2016-09-09 18:54:15
【问题描述】:

我想使用 JavaPoet 生成一个以类型文字为值的注解。例如:

@AutoService(MyService.class)
public class GeneratedClass implements MyService {
}

我已经尝试了所有我能想到的选项,但没有一个可行:

TypeSpec.classBuilder("GeneratedClass")
    .addModifiers(Modifier.PUBLIC)
    .addSuperinterface(MyService.class)
    .addAnnotation(
        AnnotationSpec.builder(AutoService.class).addMember(
            "value", "$L", MyService.class
        ).build()
    )

使用$L 生成interface MyService

使用$T 生成my.package.MyService,这很接近但错过了.class 部分。

使用$N 会报错:expected name but was my.package.MyService

如何让它生成MyService.class 作为注释值?

【问题讨论】:

    标签: java javapoet


    【解决方案1】:

    你试过了吗?

    TypeSpec.classBuilder("GeneratedClass")
                .addModifiers(Modifier.PUBLIC)
                .addSuperinterface(MyService.class)
                .addAnnotation(
                        AnnotationSpec.builder(AutoService.class).addMember(
                        "value", "$T.class", MyService.class).build()
                ).build();
    

    【讨论】:

    • 我不知道其他方法。我想这是推荐的,因为 formatString 而不是 Enum
    • 当你与ParameterizedTypeName打交道时会怎样?
    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2015-11-18
    相关资源
    最近更新 更多