- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以使用JavaPoet生成以下枚举类?
public enum EnumName {
import com.sth.sth.SomeClass1;
import com.sth.sth.SomeClass2;
ITEM1(new CustomType<SomeClass1>("string1", "string 2", SomeClass1.class)),
ITEM2(new CustomType<SomeClass2>("string1", "string 2", SomeClass2.class));
EnumName(CustomType customType) {
this.customType = customType;
}
private final CustomType customType;
public CustomType getCustomType() {
return customType;
}
}
我可以创建一切,但我在 ITEM 内的初始化 block 上遇到了巨大的困难。
我当前的代码是
TypeSpec.Builder typeSpecBuilder = TypeSpec.enumBuilder("EnumName")
.addModifiers(PUBLIC)
.addField(TypeVariableName.get("CustomType"), "customType", PRIVATE, FINAL)
.addMethod(MethodSpec.constructorBuilder()
.addParameter(TypeVariableName.get("CustomType"), "customType")
.addStatement("this.$N = $N", "customType", "customType")
.build())
.addMethod(MethodSpec.methodBuilder("getCustomType")
.addModifiers(PUBLIC)
.addStatement("return customType")
.returns(TypeVariableName.get("CustomType"))
.build());
for (Model model : models) {
typeSpecBuilder.addEnumConstant(prepareName(model), HERE I DO NOT KNOW HOW TO BUILD TypeSpec that would create what i need);
}
我能够创建这个
public enum EnumName {
ITEM1("ITEM1"){
@Override
public CustomType getCustomType(){
return new CustomType<SomeClass1>("string1", "string 2", SomeClass1.class));
}
},
ITEM2("ITEM2"){
@Override
public CustomType getCustomType(){
return new CustomType<SomeClass2>("string1", "string 2", SomeClass2.class));
}
};
EnumName(customTypeName customTypeName) {
this.customTypeName = customTypeName;
}
private final String customTypeName;
public String getCustomTypeName() {
return customTypeName;
}
通过像这样调整周期:
for (Model model : models) {
typeSpecBuilder.addEnumConstant(prepareName(model), TypeSpec.anonymousClassBuilder("$S", prepareName(model))
.addMethod(MethodSpec.methodBuilder("getCustomType")
.addAnnotation(Override.class)
.addModifiers(PUBLIC)
.addStatement(getInitStatement(model))
.returns(TypeVariableName.get("CustomType"))
.build())
.build());
}
这部分没问题,但我不知道如何为这些类生成导入。
我更喜欢第一个选项
ITEM1(new CustomType<SomeClass1>("string1", "string 2", SomeClass1.class))
但如果无法完成,有人可以建议如何为第二个示例生成导入并调整周期?
非常感谢您的建议。
最佳答案
如果有人对 future 感兴趣,那就找到解决方案了。
String fullyQualifiedClassName = getClassName();
if (fullyQualifiedClassName == null) {
fullyQualifiedClassName = "Object"; //important if class was not found we need set to object -> otherwise there will not be imports for some reason
}
TypeName typeName = ClassName.bestGuess(fullyQualifiedClassName);
for (Model model : models) {
typeSpecBuilder.addEnumConstant(prepareName(model), TypeSpec.anonymousClassBuilder("new CustomType<$T>($S, $S, $T.class)", typeName, string1, string2, typeName));
}
关于java - 如何使用 JavaPoet 构造自定义类型的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58136538/
有没有办法在javapoet库中生成内部类。我可以用构造函数和方法生成类。但我不知道如何创建内部类 最佳答案 使用 TypeSpec.Builder#addType方法。见 nestedClasses
我想生成这样的字段: public static Map> ID_MAP = new HashMap>(); WildcardTypeName.subtypeOf(Object.class) 可以给
谁能告诉我如何使用 JavaPoet 向字段添加注释? 到目前为止,我设法探索的所有示例都是关于向类和方法添加注释。 看起来我在这里遗漏了一些非常简单的东西。 最佳答案 万岁,我已经想通了,所以可能对
JavaPoet:版本 1.5.1 JDK:1.7 我正在使用注释来生成代码。这是我正在尝试的事情。 以下内容可作为该项目的一部分: @GenService public abstract class
我尝试生成带有注释的表达式: @NamedQueries({@NamedQuery(name = "E.findAll", query = "SELECT e FROM E e")}) 我尝试了下面的
如何使用 JavaPoet 创建静态导入? 我尝试生成的代码如下所示: import static com.test.Types.*; 最佳答案 备案:自1.5.0起支持静态导入 参见 JavaFil
有没有办法添加 EnumConstants 的动态列表 - 我希望看到 addEnumConstants()。 似乎与addFields()或addMethods()没有相似之处? 最佳答案 确实有n
如何生成具有以下签名的方法? public static MyOtherClass someMethod(T type) 最佳答案 使用 TypeVariableName以及addTypeVaria
我正在玩注解处理器和 JavaPoet。我有一个用@MyAnno 注释的方法: @MyAnno Observable get(int id); 我想生成一个有方法的类: AsyncSubject ge
如何让 javapoet 生成下面的 java 代码? class B implements A { } 我知道有一个class WildcardTypeName ,但它只能生成? extends U
如何生成具有以下签名的方法? public void doSomething(T t) 到目前为止我有: MethodSpec.methodBuilder("doSomething")
我正在尝试向 TypeSpec 添加一个内部类(例如 interface Listener{})。我还想在我的 TypeSpec 中添加一个类型为 Listener 的字段。我怎样才能实现这样的目标?
我尝试在 JavaPoet api 中创建 TestSuite。我在 testClasses 中有包含 junit 类的 List,所以我想添加成员注释,但 addmember 允许我们一次仅添加一个
嘿,我正在尝试生成这样的类: public abstract class ResourceListAdapter extends RecyclerView.Adapter {} 目前我可以生成: pu
我一直在尝试在注解处理器中生成代码。 考虑以下代码,它添加了一个包含语句的构造函数。 private void addRegister(ExecutableElement el) { Meth
我创建了一个使用 JavaPoet 生成类的 Android 库。它适用于我的本地工作区;即使我将库模块包含到另一个项目中。 现在我正尝试通过 bintray 将我的项目放到网上。项目已正确上传,但是
在 JavaPoet 中,我需要创建一个 TypeName 的实例来表示给定名称的内部类。 我有一个外部类的 TypeSpec.Builder classBuilder。不知道下一步该做什么。 请注意
我正在开发一个注释处理器库,并使用 JavaPoet 生成一些 Java 代码。我需要生成一个带有用匿名类声明的字段的类,如下代码所示: public class Dummy { privat
是否可以使用JavaPoet生成以下枚举类? public enum EnumName { import com.sth.sth.SomeClass1; import com.sth.sth.
我正在使用注释处理器并使用 JavaPoet 从处理中生成输出类,但我似乎无法找到一种方法让生成的方法返回正确类型的对象。例如,我想要的输出是这样的…… public static final Map
我是一名优秀的程序员,十分优秀!