Google guava iterables.filter,输入与泛型有关的错误?

时间:2013-07-03 20:52:57

标签: java generics guava iterable

我有一个自定义谓词,其签名如下:

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>
  • 我在单元测试中这样做没有任何问题。

发生了什么事?

1 个答案:

答案 0 :(得分:0)

事实证明,我的问题是访问问题而不是类型问题。我试图过滤私有内部类(用于测试目的),而java显然不喜欢这样。我把它公之于众,一切都按预期工作了。