【问题标题】:Method chaining results in unchecked call warning方法链接导致未经检查的调用警告
【发布时间】:2016-06-03 11:22:15
【问题描述】:

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

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

【问题讨论】:

    标签: java methods warnings chaining unchecked


    【解决方案1】:

    您的返回值中缺少通用信息,返回 原始(非通用)FilteredDataService

    使用public FilteredDataService&lt;B&gt; addFilter(Predicate&lt;B&gt; filter) 保留泛型。

    【讨论】:

      【解决方案2】:

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

      未经检查地调用“addFilter(Predicate)”作为原始类型“FilteredDataService”的成员。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 2015-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-08
        • 1970-01-01
        相关资源
        最近更新 更多