如何让JavaPoet生成类文字?

Jor*_*orn 5 java javapoet

我想使用JavaPoet生成一个类型为literal的注释作为值.例如:

@AutoService(MyService.class)
public class GeneratedClass implements MyService {
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有我能想到的选项,但都没有用:

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

使用$L生成interface MyService

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

使用$N给出错误:expected name but was my.package.MyService

如何将其生MyService.class成为注释值?

Dav*_*era 3

你尝试过这个吗?

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