我写了一些代码来测试Supplier
,但出了些问题,但我不知道为什么。
这是代码:
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Client {
public static void main(String[] args) {
List<Integer> list = IntStream.range(1, 11).boxed().collect(Collectors.toList());
List<User> newList = addToList(list, User::new);
System.out.println(newList);
}
private static <T extends User> List<T> addToList(List<Object> srcList, Supplier<T> sp) {
if (srcList == null || srcList.isEmpty())
return null;
return srcList.stream().map(src -> {
T t = sp.get();
t.setAge(Integer.parseInt(src.toString()));
return t;
}).collect(Collectors.toList());
}
static class User {
Integer age;
public Integer getAge() {
return age;
}
void setAge(Integer age) {
this.age = age;
}
}
}
List<User> newList = addToList(list, User::new)
此处显示错误:
“方法引用中的返回类型错误:无法将用户转换为T”。
然后将私有方法更改为以下内容:
private static <T extends User, R> List<T> addToList(List<R> srcList, Supplier<T> sp) {
if (srcList == null || srcList.isEmpty())
return null;
return srcList.stream().map(src -> {
T t = sp.get();
t.setAge(Integer.parseInt(src.toString()));
return t;
}).collect(Collectors.toList());
}
,这次没有错误。
这是怎么了每个类都应该是Object
的子类,请问为什么我不能在这里使用'Object'?
如果有人帮助我,我将不胜感激。