fluent-builders-generator项目的CORE的补充 编译错误
失败方法endParameter()未定义类型JavaSourceBuilderBase.MethodParameterBuilderBase
目标行是
.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
答案 0 :(得分:1)
我也查看了fluent-builders-generator,但结果相同。库的生成器部分是未完成的,因为它不会编译。即使您使用@Nassim MOUALEK的答案修复了JavaSourceBuilder
问题,您也会失败,因为基本的ReflectionUtil
和SignatureUtil
方法会抛出UnsupportedException
。它们没有实现。
无论如何,这台发电机从未工作过。那是因为你需要在编译时使用Builder,但是生成器本身需要编译的内省来进行内省。如果您正在考虑maven构建阶段,则此生成器将位于generate-sources
阶段,其中源代码尚未编译。但整个生成器只能在已编译的类上运行。
由于构建器构建器是一个eclipse插件,并且在源代码级别上运行,因此这个概念与eclipse很好地协同工作。这很可能是发电机未完成的原因。
如果您正在寻找实际工作的构建器生成器,请查看pojobuilder。它使用javax.annotation.processing.Processor
在编译时生成构建器。
答案 1 :(得分:0)
经过一些操作之后,它看起来项目还没有完成,但我成功地运行了它,有些变化如下:
p s class MethodParameterBuilderBase<GeneratorT extends MethodParameterBuilderBase> {
...
}
到
p s class MethodParameterBuilderBase<GeneratorT extends ParameterMethodParameterBuilder> {
....
}
这删除了编译异常