fluent-builders-generator 核心的编译项目 因编译错误而失败
JavaSourceBuilderBase.MethodParameterBuilderBase 类型未定义方法 endParameter()
目标行是
.withParameter().withType(..).withName("aInstance").endParameter()
withParameter() 返回一个有效包含 endParameter() 但不包含他的父类的类
public class ParameterMethodParameterBuilder extends MethodParameterBuilderBase<ParameterMethodParameterBuilder> {
public ParameterMethodParameterBuilder(com.sabre.buildergenerator.sourcegenerator.java.MethodParameter aInstance) {
super(aInstance);
}
public GeneratorT endParameter() {
return (GeneratorT) MethodBuilderBase.this;
}
}
现在是父类(super class)
public static class MethodParameterBuilderBase<GeneratorT extends MethodParameterBuilderBase> {
private final com.sabre.buildergenerator.sourcegenerator.java.MethodParameter instance;
protected MethodParameterBuilderBase(com.sabre.buildergenerator.sourcegenerator.java.MethodParameter aInstance) {
instance = aInstance;
}
protected com.sabre.buildergenerator.sourcegenerator.java.MethodParameter getInstance() {
return instance;
}
public GeneratorT withType(java.lang.String aValue) {
instance.setType(aValue);
return (GeneratorT) this;
}
public GeneratorT withName(java.lang.String aValue) {
instance.setName(aValue);
return (GeneratorT) this;
}
}
所以问题是 withName() 和 withType() 返回不包含 endParameter 的父类(super class)。
我认为这与编译器版本或参数有关。
关于GeneratorT的上下文
public class JavaSourceBuilder extends JavaSourceBuilderBase<JavaSourceBuilder> {
public static JavaSourceBuilder javaSource() {
return new JavaSourceBuilder();
}
public JavaSourceBuilder() {
super(new com.sabre.buildergenerator.sourcegenerator.java.JavaSource());
}
public com.sabre.buildergenerator.sourcegenerator.java.JavaSource build() {
return getInstance();
}
}
@SuppressWarnings("unchecked")
class JavaSourceBuilderBase<GeneratorT extends JavaSourceBuilderBase> {
...
完整的类源代码:JavaSourceBuilder.java
最佳答案
我还查看了 fluent-builders-generator但得出了同样的结果。库的生成器部分未完成,因为它无法编译。即使您使用@Nassim MOUALEK 的答案修复了 JavaSourceBuilder
问题,您稍后也会失败,因为基本的 ReflectionUtil
和 SignatureUtil
方法会抛出 不支持的异常
。它们未实现。
无论如何,这个发电机永远不会工作。那是因为您在编译时需要 Builder,但生成器本身需要编译后的源代码进行内省(introspection)。如果您正在考虑 maven 构建阶段,则此生成器将位于 generate-sources
阶段,其中源代码尚未编译。但是整个生成器只能对已经编译好的类进行操作。
由于 builders 构建器是一个 eclipse 插件,并且在源代码级别上运行,因此这个概念可以很好地与 eclipse 配合使用。这很可能就是生成器未完成的原因。
如果您正在寻找实际工作的构建器生成器,请查看 pojobuilder .它使用 javax.annotation.processing.Processor
在编译时生成构建器。
关于父类(super class)的 Java 泛型上下文类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23205527/