Java CodeModel:手动插入导入语句
如何使用手动插入导入语句 我想用在直接陈述中Java CodeModel:手动插入导入语句,java,code-generation,sun-codemodel,Java,Code Generation,Sun Codemodel,如何使用手动插入导入语句 我想用在直接陈述中 上下文:我正在生成的代码中生成一个toString()方法,就像Eclipse一样。Arrays类用于避免打印对我声明的数组的引用。解决方案是引用该类: JClass arrays = codeModel.ref(Arrays.class); 我的解决方法是在直接语句中通过其完整的包声明引用该类 这是我目前正在编写的一段代码,请注意完整的包声明。 我还编写了一些帮助程序或枚举类型,以快速生成某个类的完整路径作为字符串 save.addClickLi
上下文:我正在生成的代码中生成一个toString()方法,就像Eclipse一样。Arrays类用于避免打印对我声明的数组的引用。解决方案是引用该类:
JClass arrays = codeModel.ref(Arrays.class);
我的解决方法是在直接语句中通过其完整的包声明引用该类 这是我目前正在编写的一段代码,请注意完整的包声明。 我还编写了一些帮助程序或枚举类型,以快速生成某个类的完整路径作为字符串
save.addClickListener(event -> {
if (binder.writeBeanIfValid(pojo())) {
infoLabel.setText("Saved bean values: " + pojo());
} else {
com.vaadin.flow.data.binder.BinderValidationStatus<POJO> validate = binder.validate();
String errorText = validate.getFieldValidationStatuses()
.stream().filter(com.vaadin.flow.data.binder.BindingValidationStatus::isError)
.map(com.vaadin.flow.data.binder.BindingValidationStatus::getMessage)
.map(java.util.Optional::get).distinct()
.collect(java.util.streamCollectors.joining(", "));
infoLabel.setText("There are errors: " + errorText);
}
});
save.addClickListener(事件->{
if(binder.writeBeanIfValid(pojo())){
setText(“保存的bean值:”+pojo());
}否则{
com.vaadin.flow.data.binder.BinderValidationStatus validate=binder.validate();
字符串errorText=validate.getFieldValidationStatus()
.stream().filter(com.vaadin.flow.data.binder.BindingValidationStatus::iError)
.map(com.vaadin.flow.data.binder.BindingValidationStatus::getMessage)
.map(java.util.Optional::get).distinct()
.collect(java.util.streamCollectors.joining(“,”);
infoLabel.setText(“有错误:+errorText”);
}
});
这就是你真正需要做的一切吗?这对我不起作用。它对我起作用,但也许你的问题是,在你得到它的引用后,你不使用它?您是否调用了引用上的方法?我将它用于:arrays.staticInvoke(“toString”).arg(JExpr.\u this().ref(fieldName))我将它用于文本方法名definedClass.staticInvoke(“builder”)
。我还没有找到另一种方法来参数化对方法的泛型调用。我知道我需要使用被引用的类,但是将方法作为字符串调用实际上并不使用它,不管调用之前是否使用.ref
Aspect.class。现在,为了导入它,我创建了一个具有该类型的额外字段(“实际使用JClass”),但这是一个非常糟糕的攻击。