2016-09-09 11 views
5

JavaPoetを使用して、タイプリテラルを値として持つアノテーションを生成したいと考えています。たとえば:JavaPoetにクラスリテラルを生成させるにはどうすればよいですか?

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

私は、私は考えることができるすべてのオプションを試してみましたが、どれも作業しました:$Lを使用して

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

$Tを使用してinterface MyService

を生成し、近くである、my.package.MyServiceを生成しますが、 .class部分が欠けています。 $Nを使用して

はエラーを与える:expected name but was my.package.MyService

は、どのように私はそれが注釈値としてMyService.class生成するのですか?

答えて

2

これを試しましたか?

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

私は他のやり方を知らない。 'format'は' Enum'ではなく 'String'なので、これが推奨されたと思います。 –

+0

これはまさに正しい方法です。 –

+0

'ParameterizedTypeName'を扱うときはどうですか? – WouterH

関連する問題