无法分配接收通用 List 并返回 List<?> 的方法返回的结果

Vic*_*res 1 java generics list unbounded-wildcard java-stream

我正在尝试过滤实现接口的对象列表。我正在尝试为所有类创建一个通用方法。

就像是:

interface SomeInterface {
    String getFlag();
}


class SomeObject implements SomeInterface {
    public String getFlag() {
        return "X";
    }
}


List<SomeObject> someObjectList = new ArrayList<>();

// Compilation error here
List<SomeObject> filterList = filterGenericList(someObjectList, "X");


private List<?> filterGenericList(List<? extends SomeInterface> objects, String flag) {
        return objects.stream()
                .filter(it -> it.getFlag().equals(flag))
                .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

如何避免编译错误?

 Incompatible types. 
 Found: 'java.util.List<capture<?>>', 
 Required: 'java.util.List<SomeObject>'
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 5

当您返回时List<?>,这意味着该方法返回某种未知类型的列表。Java 不知道它与输入列表是同一类型的列表。为了表明这一点,创建一个泛型类型T并将输入和输出列表都设置为List<T>

private <T extends SomeInterface> List<T> filterGenericList(List<T> objects, String flag) {
    return objects.stream()
        .filter(it -> it.getFlag().equals(flag))
        .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)