gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:19:29 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com