我有以下接口,由以下类实现。对于这个类,我希望能够使用方法链接,这就是为什么我在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'.
我无法弄清楚为什么会发生这种情况以及如何将其删除。任何帮助将不胜感激。
答案 0 :(得分:2)
您遗漏了返回值中的通用信息,并返回原始(非通用)FilteredDataService
。
使用public FilteredDataService<B> addFilter(Predicate<B> filter)
保留通用。
答案 1 :(得分:0)
当你想使用泛型并链接这个方法时,你必须像Kayaman写的那样创建完全通用的方法(包括返回)。看看你得到了什么:
取消选中&#39; addFilter(Predicate)&#39;作为原始类型的成员&#39; FilteredDataService&#39;。
简单翻译:您正在调用应接受泛型参数的方法(addFilter(谓词过滤器)),但您在链接期间发送非泛型参数(返回此; = FilteredDataService - &gt;非泛型)。 只是为了澄清:o)