超类的Java泛型上下文类型
项目核心的合规性 失败,出现编译错误 类型JavaSourceBuilderBase.MethodParameterBuilderBase的方法endParameter()未定义 目标线是超类的Java泛型上下文类型,java,Java,项目核心的合规性 失败,出现编译错误 类型JavaSourceBuilderBase.MethodParameterBuilderBase的方法endParameter()未定义 目标线是 .withParameter().withType(..).withName("aInstance").endParameter() withParameter()返回一个有效包含endParameter()但不包含其超类的类 public class ParameterMethodParameterBu
.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;
}
}
公共类参数MethodParameterBuilder扩展了MethodParameterBuilderBase{
公共参数MethodParameterBuilder(com.sabre.buildergenerator.sourcegenerator.java.MethodParameter ainStation){
超级(aInstance);
}
公共生成器端口endParameter(){
return(GeneratorT)MethodBuilderBase.this;
}
}
现在是超级班
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;
}
}
公共静态类方法ParameterBuilderBase{
私有最终com.sabre.buildergenerator.sourcegenerator.java.MethodParameter实例;
受保护的MethodParameterBuilderBase(com.sabre.buildergenerator.sourcegenerator.java.MethodParameter aInstance){
实例=立场;
}
受保护的com.sabre.buildergenerator.sourcegenerator.java.MethodParameter getInstance(){
返回实例;
}
带类型的公共生成器端口(java.lang.String aValue){
setType(aValue);
返回(生成端口)此;
}
具有名称的公共生成器端口(java.lang.String aValue){
setName(aValue);
返回(生成端口)此;
}
}
所以问题是withName()和withType()返回不包含endParameter的超类
我认为这与编译器版本或参数有关
关于生成端口的上下文
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扩展了JavaSourceBuilderBase{
公共静态JavaSourceBuilder javaSource(){
返回新的JavaSourceBuilder();
}
公共JavaSourceBuilder(){
super(新的com.sabre.buildergenerator.sourcegenerator.java.JavaSource());
}
public com.sabre.buildergenerator.sourcegenerator.java.JavaSource build(){
返回getInstance();
}
}
@抑制警告(“未选中”)
类JavaSourceBuilderBase{
...
}
完整的类源代码:经过一些操作后,看起来项目还没有完成,但我成功地运行了它,其中有一些更改,如:
p s class MethodParameterBuilderBase<GeneratorT extends MethodParameterBuilderBase> {
...
}
ps类方法参数builderbase{
...
}
到
ps类方法参数builderbase{
....
}
这将删除编译异常我还查看了,但得到了相同的结果。库的生成器部分未完成,因为它无法编译。即使您使用@Nassim MOUALEK的答案解决了JavaSourceBuilder
问题,您稍后也会失败,因为基本的ReflectionUtil
和SignatureUtil
方法抛出不支持异常。它们没有得到执行
无论如何,这台发电机永远不会工作。这是因为编译时需要生成器,但生成器本身需要编译后的源代码进行内省。如果您考虑的是maven构建阶段,那么这个生成器将位于生成源代码
阶段,其中源代码尚未编译。但是整个生成器只能在已经编译的类上运行
由于builders是一个eclipse插件,并且在源代码级别上运行,因此这个概念与eclipse配合得很好。这很可能就是发电机未完工的原因
如果你正在寻找一个实际工作的生成器,请看一看。它使用javax.annotation.processing.Processor
在编译时生成构建器 在ParameterMethodParameterBuilder
的上下文中,什么是Generator
?您认为这可能是您的问题吗?您似乎正在尝试使用“奇怪的重复模板模式”。。。但是有点不对劲。也就是说,您的子类没有generator
。。。这是扩展基类时指定的基类的泛型类型参数。返回一个ParameterMethodParameterBuilder
它不是我的代码,它是一个开源项目,我只是想构建它