方法链接导致未经检查的呼叫警告

时间:2016-06-03 11:22:15

标签: java methods warnings chaining unchecked

我有以下接口,由以下类实现。对于这个类,我希望能够使用方法链接,这就是为什么我在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'.

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

2 个答案:

答案 0 :(得分:2)

您遗漏了返回值中的通用信息,并返回原始(非通用)FilteredDataService

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

答案 1 :(得分:0)

当你想使用泛型并链接这个方法时,你必须像Kayaman写的那样创建完全通用的方法(包括返回)。看看你得到了什么:

  

取消选中&#39; addFilter(Predicate)&#39;作为原始类型的成员&#39; FilteredDataService&#39;。

简单翻译:您正在调用应接受泛型参数的方法(addFilter(谓词过滤器)),但您在链接期间发送非泛型参数(返回此; = FilteredDataService - &gt;非泛型)。 只是为了澄清:o)