我有一个带有构造函数和构建器方法的泛型类:
public class FilterBuilder<T> {
public FilterBuilder() {
}
public FilterBuilder<T> add(T x) {
...
return this;
}
}
我实例化,但添加不起作用于构造函数调用:
FilterBuilder<String> filter = new FilterBuilder().add("test");
这使得&#39;无法在Intellij中解决方法添加&#39; 错误。我必须这样做才能使它发挥作用:
FilterBuilder<String> filter = new FilterBuilder();
filter.add("test");
但为什么?
答案 0 :(得分:1)
使用您的实际代码,我认为在指定菱形运算符<>
时会出现问题:
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");