Java:使用带泛型构造函数的构建模式时“无法解析方法”
我有一个带有构造函数和生成器方法的泛型类:Java:使用带泛型构造函数的构建模式时“无法解析方法”,java,generics,constructor,builder,Java,Generics,Constructor,Builder,我有一个带有构造函数和生成器方法的泛型类: public class FilterBuilder<T> { public FilterBuilder() { } public FilterBuilder<T> add(T x) { ... return this; } } 我实例化了,但是add在构造函数调用中不起作用: FilterBuilder<String> filter = new
public class FilterBuilder<T> {
public FilterBuilder() {
}
public FilterBuilder<T> add(T x) {
...
return this;
}
}
我实例化了,但是add在构造函数调用中不起作用:
FilterBuilder<String> filter = new FilterBuilder().add("test");
这会在Intellij中出现“无法解析方法添加”错误。我必须这样做才能让它工作:
FilterBuilder<String> filter = new FilterBuilder();
filter.add("test");
但是为什么呢?对于您的实际代码,我认为在指定菱形运算符时会出现问题: 原始类型不应该生成编译错误,而是警告,但如果您的IDE配置在这方面更严格的话
是IDE特有的编译错误,因为他们认为新的Filter Builder是一个原始类型,即使声明的生成器的类型是./P> 通过使用javac编译,在eclipseoxygen上没有编译错误,我遇到了这个问题
我怀疑IDE中没有实现diamond运算符支持,以允许将实例化链接到实例方法调用 作为解决方法,您可以分两次完成工作:FilterBuilder<String> filter = new FilterBuilder<>();
filter.add("test");
或指定两次泛型:
FilterBuilder<String> filter = new FilterBuilder<String>().add("test");
第一个代码段工作正常,除了一个原始类型警告。您确定该行导致错误吗?你能分享准确的文字吗?我也试过了,没有错误,不会有任何错误。请检查您的代码。我在InteliJ中测试了这两个版本,没有问题都编译了。您使用的IntelliJ版本是什么?最好不要将生成器存储在任何地方,只使用:new FilterBuilder.addtest;如果你把它作为方法参数传递,我想?我将创建一个大参数:well builder应该在这里创建一个对象,我不希望将生成器传递给任何人,但我猜可能是这样的
FilterBuilder<String> filter = new FilterBuilder<String>().add("test");