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)
当您返回时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)