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