我有一个自定义谓词,其签名如下:
public class ELPredicate<T> implements Predicate<T>
我正在尝试在类似于以下的函数中过滤它们:
public List<ComponentDefinition> filterComponents(String expression, List<ComponentDefinition> definitions) {
if (definitions == null || definitions.size() == 0) {
return new ArrayList<ComponentDefinition>();
}
ELPredicate<ComponentDefinition> predicate = new ELPredicate<>(expression);
return Lists.newArrayList(Iterables.filter(definitions, predicate));
}
但我收到此错误:
The method filter(Iterable<T>, Predicate<? super T>) in the type Iterables is not applicable for the arguments (List<ComponentDefinition>, ELPredicate<ComponentDefinition>)
从(我认为)我知道的:
- 列表是可迭代的,
<ComponentDefinition>
是<? super ComponentDefinition>
- 我在单元测试中这样做没有任何问题。
这是怎么回事?