方法链接导致未检查的调用警告

Method chaining results in unchecked call warning

我得到了下面的接口,由下面的 class 实现。对于这个 class,我希望能够使用方法链接,这就是为什么我在 addFilter() 方法的末尾添加了一个 "return this":

public interface IFilteredDataService<B extends Bean> extends IDataService<B>
{
    FilteredDataService applyFilter(Predicate<B> filter);
}

public class FilteredDataService<B extends Bean> implements IFilteredDataService<B>
{
    @Override
    public FilteredDataService addFilter(Predicate<B> filter)
    {
        filters.add(filter);
        return this;
    }
}

当我按以下方式使用 addFilter() 方法时,一切正常:

someInstance.addFilter(foo);
someInstance.addFilter(bar);

当我像这样使用方法链接时:

someInstance.addFilter(foo).addFilter(bar);

它仍然工作正常,但我收到以下警告:

Unchecked call to 'addFilter(Predicate<B>)' as a member of raw type 'FilteredDataService'.

我无法弄清楚为什么会发生这种情况以及如何删除它。任何帮助将不胜感激。

您的 return 值中缺少通用信息,returning a raw(非通用)FilteredDataService

使用 public FilteredDataService<B> addFilter(Predicate<B> filter) 保留泛型。

当您想使用泛型并链接此方法时,您必须创建 完全泛型方法 (包括 returning),如 Kayaman 所写。看看你得到了什么:

Unchecked call to 'addFilter(Predicate)' as a member of raw type 'FilteredDataService'.

简单翻译:您正在调用应该接受通用参数 (addFilter(Predicate filter)) 的方法,但您在链接期间发送了非通用参数(return this; = FilteredDataService -> Non-Generic)。 只是为了澄清 :o)