2016-09-09 16 views
5

JavaPoet'i, bir literal değeri olan bir ek açıklama oluşturmak için kullanmak istiyorum. Ben Aklıma gelen tüm seçenekleri denedimBir sınıf değişmezi oluşturmak için JavaPoet'i nasıl alabilirim?

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

, ama hiçbiri işe: Örneğin:

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

yakın ama hangi $L$Tmy.package.MyService üretir kullanılarak interface MyService

üretir kullanarak .class parçasını özlüyor. Ben açıklama değeri olarak MyService.class oluşturmak için nasıl elde edersiniz expected name but was my.package.MyService

: $N kullanarak

hata veriyor?

cevap

2

Bunu denediniz mi?

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

bunu yapmak için başka bir yol bilmiyorum. Tavsiye ediyorum çünkü format ''' '' '' '' '' '' '' '''' değil. –

+0

Tam olarak doğru yol. –

+0

Bir 'ParameterizedTypeName' ile uğraşırken n'aber? – WouterH

İlgili konular