2017-06-16 2 views
0

J'ai besoin de générer le paramètre suivant java.class pour la classe Enum:Comment générer un paramètre de classe avec javapoet?

public enum ServiceType { 

     //.... 
     private final Class<?> mClass; //<<how? 

     ServiceType(final Class<?> clazz) { 
      this.mClass = clazz; 
     } 

     public Class<?> getCurrentClass() { 
      return mClass; 
     } 
     //... 
    } 

Et je ne trouve - comment faire ce domaine.

Mon code pour la génération de cette classe:

 File path = new File(Path.ROOT + ENUM_PATH); 

     TypeSpec.Builder servicesEnumBuilder = TypeSpec.enumBuilder(ENUM_CLASS_NAME) 
       .addModifiers(Modifier.PUBLIC); 

     for (Map.Entry<String, String> entry: foundedServices.entrySet()) { 
      servicesEnumBuilder.addEnumConstant(
        entry.getKey().toUpperCase() + ENUM_SUFFIX, 
        TypeSpec.anonymousClassBuilder("$T", ClassName.get(entry.getValue() , entry.getKey())).build()); 
     } 

     servicesEnumBuilder.addField(); //<< how add this field: private final Class<?> mClass; 

Répondre

3

Vous pouvez vérifier this answer

appliquée à votre cas, il serait quelque chose comme ceci:

TypeName wildcard = WildcardTypeName.subtypeOf(Object.class); 
    TypeName classOfAny = ParameterizedTypeName.get(
      ClassName.get(Class.class), wildcard); 
    FieldSpec field = FieldSpec.builder(classOfAny, "mClass") // You may consider using a constant here 
      .addModifiers(Modifier.PRIVATE, Modifier.FINAL) 
      .build(); 

    servicesEnumBuilder.addField(field);