我有一个自定义谓词,其签名如下:
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>
发生了什么事?
答案 0 :(得分:0)
事实证明,我的问题是访问问题而不是类型问题。我试图过滤私有内部类(用于测试目的),而java显然不喜欢这样。我把它公之于众,一切都按预期工作了。