2

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

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

这是怎么回事?

4

1 回答 1

0

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

于 2013-07-10T15:51:37.093 回答