Java:"无法解析方法"使用具有通用构造函数的构建模式时

时间:2017-12-22 08:52:13

标签: java generics constructor builder

我有一个带有构造函数和构建器方法的泛型类:

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");

但为什么?

1 个答案:

答案 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");