父类(super class)的 Java 泛型上下文类型

标签 java

fluent-builders-generator 核心的编译项目 因编译错误而失败

JavaSourceBuilderBase.MethodParameterBuilderBase 类型未定义方法 endParameter()

enter image description here

目标行是

.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 问题,您稍后也会失败,因为基本的 ReflectionUtilSignatureUtil 方法会抛出 不支持的异常。它们未实现。

无论如何,这个发电机永远不会工作。那是因为您在编译时需要 Builder,但生成器本身需要编译后的源代码进行内省(introspection)。如果您正在考虑 maven 构建阶段,则此生成器将位于 generate-sources 阶段,其中源代码尚未编译。但是整个生成器只能对已经编译好的类进行操作。

由于 builders 构建器是一个 eclipse 插件,并且在源代码级别上运行,因此这个概念可以很好地与 eclipse 配合使用。这很可能就是生成器未完成的原因。

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

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

相关文章:

java - FastVector<E> 类型已弃用

java - split 方法-生成空指针异常

java - Sip INVITE 错误并发送 BYE 消息

ArrayList<Map> 的 Java 转换

java - 输入字符串而不是 int 时抛出错误

java - Gradle Artifactory 插件 - 如何自动部署 Spring Boot Fatjar

java - Android 小部件尺寸错误

java - MySQL,从已解析文件加载数据的最有效方式

java - 我的空指针异常

java - 仅按日期部分比较两个日期,而不是时间