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
问题,您也将在以后失败,因为基本的ReflectionUtil
和SignatureUtil
方法会抛出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/