我有一个具有以下特征的自定义谓词:

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显然不喜欢这样。我将其公开,一切都按预期进行。

10-06 06:13