我有一个具有以下特征的自定义谓词:
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>
我在单元测试中没有任何问题。
这是怎么回事?
最佳答案
事实证明,我的问题是访问问题而不是类型问题。我试图过滤私有内部类(出于测试目的),而Java显然不喜欢这样。我将其公开,一切都按预期进行。