簡體   English   中英

方法鏈接導致未經檢查的呼叫警告

[英]Method chaining results in unchecked call warning

我有以下由以下類實現的接口。 對於此類,我希望能夠使用方法鏈接,這就是為什么我在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'.

我無法弄清楚為什么會發生這種情況以及如何刪除它。 任何幫助將不勝感激。

您將在返回值中缺少通用信息,從而返回原始 (非通用) FilteredDataService

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

當您想使用泛型並鏈接此方法時,您必須按照Kayaman的說明創建完全泛型的方法 (包括返回)。 看看您得到了什么:

以原始類型'FilteredDataService'的成員的形式未經選擇地調用'addFilter(Predicate)'。

簡單來說:您正在調用應接受通用參數(addFilter(Predicate filter))的方法,但是在鏈接期間發送了非通用參數(返回此參數; = FilteredDataService->非通用)。 只是為了澄清:o)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM