【发布时间】:2020-02-04 14:02:30
【问题描述】:
Java 11(可能不相关):
public static String toString(Object obj) {
return ReflectionToStringBuilder.toString(obj, ToStringStyle.SHORT_PREFIX_STYLE);
}
public static String toString(Collection<Object> collection) {
return collection.stream()
.map(SaLogUtils::toString)
.collect(Collectors.joining(", ", "[", "]"));
}
public static void main(String[] args) {
List<Integer> list = List.of(Integer.valueOf(1));
System.out.println(SaLogUtils.toString(list));
System.out.println(SaLogUtils.toString(List.of(Integer.valueOf(1))));
}
令人惊讶的输出:
// from toString(Object)
ImmutableCollections.List12[e0=1,e1=<null>]
// from toString(Collection<Object>)
[Integer[value=1]]
为什么Java静态选择不同的方法?
【问题讨论】:
-
顺便说一句,没有理由使用
Integer.valueOf(1)。你可以简单地写List.of(1)
标签: java generics java-11 overload-resolution static-polymorphism