fluent-builders-generator项目CORE的编写
因编译错误而失败

对于类型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;
    }
}


现在超级班

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的超类。

我认为这与编译器版本或参数有关。

关于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问题,您也将在以后失败,因为基本的ReflectionUtilSignatureUtil方法会抛出UnsupportedException。它们没有实现。

无论如何,此生成器将永远无法工作。那是因为您需要在编译时使用Builder,但是生成器本身需要用于自省的编译源。如果您正在考虑Maven构建阶段,则此生成器将位于generate-sources阶段,在该阶段还没有编译源代码。但是整个生成器只能在已编译的类上运行。

由于builders builder是eclipse插件,并且在源代码级别上运行,因此该概念与eclipse很好地配合使用。这很可能是发电机未完成的原因。

如果您正在寻找一个实际可用的生成器生成器,请查看pojobuilder。它使用javax.annotation.processing.Processor在编译时生成生成器。

关于java - 父类(super class)的Java通用上下文类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23205527/

10-08 22:34