[英]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.