我尝试为max(a, b)
实现通用Object
方法,实现Comparable
,如下所示:
public static <T extends Comparable<T>> T max(T o1, T o2) {
return o1.compareTo(o2) >= 0 ? o1 : o2;
}
适用于,例如String
,但对于java.time.LocalDate
,类型参数解析为ChronoLocalDate
,我无法弄清楚原因:
LocalDate date1 = ..., date2 = ...;
LocalDate ld = CompareUtils.max(date1, date2); // compile error here
错误是“类型不匹配:无法从ChronoLocalDate转换为LocalDate”。我该如何解决?
答案 0 :(得分:1)
我找到了解决方案,我需要将? super T
添加到类型参数声明中:
public static <T extends Comparable<? super T>> T max(T o1, T o2) {
return o1.compareTo(o2) >= 0 ? o1 : o2;
}
答案 1 :(得分:0)
对于java.time.LocalDate
,,类型参数解析为
ChronoLocalDate
,我无法弄清楚为什么
这是因为LocalDate
实现了Comparable<ChronoLocalDate>
(而不是Comparable<LocalDate>
)。
来自Javadoc。
所有已实施的接口:
Serializable, Comparable<ChronoLocalDate>, ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^