我有一个带有构造函数和构建器方法的泛型类:
public class FilterBuilder<T> {
public FilterBuilder() {
}
public FilterBuilder<T> add(T x) {
...
return this;
}
}
我实例化,但添加无法从构造函数调用:
FilterBuilder<String> filter = new FilterBuilder().add("test");
这给了Intellij中的“无法解决方法添加”错误。我必须这样做才能使它工作:
FilterBuilder<String> filter = new FilterBuilder();
filter.add("test");
但为什么?
使用您的实际代码,我认为当您指定钻石运算符<>
时会出现问题:
FilterBuilder<String> filter = new FilterBuilder<>().add("test");
原始类型不应生成编译错误,而应生成警告,但是如果您的IDE配置在此问题上更严格。
这是IDE特有的编译错误,因为他们将new FilterBuilder<>()
视为原始类型,即使声明的构建器的类型是<String>
。
通过使用javac进行编译,在Eclipse Oxygen上没有编译错误,我有问题。
我怀疑在IDE中没有实现钻石操作符支持,以允许将实例化链接到实例方法调用。
作为解决方法,你可以做两次事情:
FilterBuilder<String> filter = new FilterBuilder<>();
filter.add("test");
或指定通用两次:
FilterBuilder<String> filter = new FilterBuilder<String>().add("test");