如何用javapoet生成Class参数?
How to generate Class parameter with javapoet?
我需要为枚举 class 生成下一个 java.class 参数:
public enum ServiceType {
//....
private final Class<?> mClass; //<<how?
ServiceType(final Class<?> clazz) {
this.mClass = clazz;
}
public Class<?> getCurrentClass() {
return mClass;
}
//...
}
而且我没有找到 - 如何创建此字段。
我的生成代码class:
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;
你可以查看this answer
适用于你的情况,它会是这样的:
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);
我需要为枚举 class 生成下一个 java.class 参数:
public enum ServiceType {
//....
private final Class<?> mClass; //<<how?
ServiceType(final Class<?> clazz) {
this.mClass = clazz;
}
public Class<?> getCurrentClass() {
return mClass;
}
//...
}
而且我没有找到 - 如何创建此字段。
我的生成代码class:
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;
你可以查看this answer
适用于你的情况,它会是这样的:
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);