1

En utilisant JavaPoet Je suis en train d'annoter une classe avec une annotation qui a un tableau comme une valeur de paramètre c.-à-tableau passe en tant que valeur d'annotation param dans JavaPoet

@MyCustom(param = { Bar.class, Another.class }) 
class Foo { 
} 

J'utilise AnnotationSpec.builder et sa méthode addMember() :

List<TypeMirror> moduleTypes = new ArrayList<>(map.keySet()); 
AnnotationSpec annotationSpec = AnnotationSpec.builder(MyCustom.class) 
    .addMember("param", "{ $T[] } ", moduleTypes.toArray()) 
    .build(); 
builder.addAnnotation(annotationSpec); 

Répondre

0

peut-être pas une solution optimale, mais le passage d'un tableau à une annotation dans JavaPoet peut être fait de la manière suivante:

List<TypeMirror> moduleTypes = new ArrayList<>(map.keySet()); 
CodeBlock.Builder codeBuilder = CodeBlock.builder(); 
boolean arrayStart = true; 
codeBuilder.add("{ "); 
for (TypeMirror modType: moduleTypes) 
    if (!arrayStart) 
     codeBuilder.add(" , "); 
    arrayStart = false; 
    codeBuilder.add("$T.class", modType); 
codeBuilder.add(" }"); 

AnnotationSpec annotationSpec = AnnotationSpec.builder(MyCustom.class) 
    .addMember("param", codeBuilder.build()) 
    .build(); 
builder.addAnnotation(annotationSpec);