方法链接导致未检查的调用警告
Method chaining results in unchecked call warning
我得到了下面的接口,由下面的 class 实现。对于这个 class,我希望能够使用方法链接,这就是为什么我在 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'.
我无法弄清楚为什么会发生这种情况以及如何删除它。任何帮助将不胜感激。
您的 return 值中缺少通用信息,returning a raw(非通用)FilteredDataService
。
使用 public FilteredDataService<B> addFilter(Predicate<B> filter)
保留泛型。
当您想使用泛型并链接此方法时,您必须创建 完全泛型方法 (包括 returning),如 Kayaman 所写。看看你得到了什么:
Unchecked call to 'addFilter(Predicate)' as a member of raw type 'FilteredDataService'.
简单翻译:您正在调用应该接受通用参数 (addFilter(Predicate filter)) 的方法,但您在链接期间发送了非通用参数(return this; = FilteredDataService -> Non-Generic)。
只是为了澄清 :o)
我得到了下面的接口,由下面的 class 实现。对于这个 class,我希望能够使用方法链接,这就是为什么我在 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'.
我无法弄清楚为什么会发生这种情况以及如何删除它。任何帮助将不胜感激。
您的 return 值中缺少通用信息,returning a raw(非通用)FilteredDataService
。
使用 public FilteredDataService<B> addFilter(Predicate<B> filter)
保留泛型。
当您想使用泛型并链接此方法时,您必须创建 完全泛型方法 (包括 returning),如 Kayaman 所写。看看你得到了什么:
Unchecked call to 'addFilter(Predicate)' as a member of raw type 'FilteredDataService'.
简单翻译:您正在调用应该接受通用参数 (addFilter(Predicate filter)) 的方法,但您在链接期间发送了非通用参数(return this; = FilteredDataService -> Non-Generic)。 只是为了澄清 :o)