在方法引用中使用类型参数与其上限之间有区别吗?
Is there a difference between using a type parameter vs its upper bound in method references?
我正在为 Java 编程进行模拟考试,我遇到了一个问题。
这是我们在 class 中编写的方法,所以是正确的。
private List<String> zetOmNaarLijstVanString(List<? extends Object> lijst){
return lijst.stream().map(Object::toString).collect(Collectors.toList());
}
这是我做的方法
private <E> List<String> zetOmNaarLijstVanString(List<E> lijst){
return lijst.stream().map(E::toString).collect(Collectors.toList());
}
区别在于第二种方法。我使整个方法通用。我真的不知道这是否是一个错误,因为我现在看不出这两种方法之间的区别。
有人可以帮我看看有什么不同吗(如果有的话)?
在您的特定示例中,没有区别。要进一步扩展它以查看实际差异,您可以以此为例:
编译和运行都很好,因为我们知道列表只包含字符串
private List<String> replaceAWithB(List<? extends String> list) {
return list.stream().map(s -> s.replaceAll("a","b")).collect(Collectors.toList());
}
不会编译,因为我们不知道 E 是一个字符串
private <E> replaceAWithB(List<E> list) {
return list.stream().map(s -> s.replaceAll("a","b")).collect(Collectors.toList());
}
我正在为 Java 编程进行模拟考试,我遇到了一个问题。 这是我们在 class 中编写的方法,所以是正确的。
private List<String> zetOmNaarLijstVanString(List<? extends Object> lijst){
return lijst.stream().map(Object::toString).collect(Collectors.toList());
}
这是我做的方法
private <E> List<String> zetOmNaarLijstVanString(List<E> lijst){
return lijst.stream().map(E::toString).collect(Collectors.toList());
}
区别在于第二种方法。我使整个方法通用。我真的不知道这是否是一个错误,因为我现在看不出这两种方法之间的区别。
有人可以帮我看看有什么不同吗(如果有的话)?
在您的特定示例中,没有区别。要进一步扩展它以查看实际差异,您可以以此为例:
编译和运行都很好,因为我们知道列表只包含字符串
private List<String> replaceAWithB(List<? extends String> list) {
return list.stream().map(s -> s.replaceAll("a","b")).collect(Collectors.toList());
}
不会编译,因为我们不知道 E 是一个字符串
private <E> replaceAWithB(List<E> list) {
return list.stream().map(s -> s.replaceAll("a","b")).collect(Collectors.toList());
}