Java LocalDate中的泛型问题
我有以下代码。我希望Java LocalDate中的泛型问题,java,list,generics,arraylist,comparable,Java,List,Generics,Arraylist,Comparable,我有以下代码。我希望Arrays.asList(LocalDate.of(2014,1,1),LocalDate.of(2015,2,2))转换成LocalDate的列表。但是我在max(dates)中遇到编译时错误。这个错误的原因可能是什么 import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class C { p
Arrays.asList(LocalDate.of(2014,1,1),LocalDate.of(2015,2,2))
转换成LocalDate的列表。但是我在max(dates)
中遇到编译时错误。这个错误的原因可能是什么
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class C {
public static <T extends Comparable<T>> T max(List<T> d) {
if (d.size() == 0) {
return null;
}
T maxValue = d.get(0);
for (T temp : d) {
if (maxValue.compareTo(temp) < 0) {
maxValue = temp;
}
}
return maxValue;
}
public static void main(String[] args) {
List<LocalDate> dates = new ArrayList<>();
dates.add(LocalDate.of(2015, 9, 15));
dates.add(LocalDate.of(2010, 9, 1));
max(dates); //This line generates compile error.
max(Arrays.asList(LocalDate.of(2014, 1, 1), LocalDate.of(2015, 2, 2)));
}
}
import java.time.LocalDate;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
公共C类{
公共静态最大温度(列表d){
如果(d.size()==0){
返回null;
}
T最大值=d.get(0);
用于(温度:d){
如果(最大值比较到(温度)<0){
最大值=温度;
}
}
返回最大值;
}
公共静态void main(字符串[]args){
列表日期=新建ArrayList();
添加日期(2015年9月15日的本地日期);
添加(LocalDate.of(2010,9,1));
max(dates);//此行生成编译错误。
max(Arrays.asList(LocalDate.of(2014,1,1),LocalDate.of(2015,2,2));
}
}
编译时错误:
类型C中的方法max(List)不适用于参数(List)预期会出现编译错误,因为它没有实现接口Comparable
,因此它不符合公共静态T max(List d)
中的类型T
相反,LocalDate
实现了ChronoLocalDate
,它本身实现了Comparable
。这意味着第二行(使用array.asList
)实际上编译得很好:类型T
被发现是ChronoLocalDate
LocalDate
实现了可比和不可比
因此,改变:
public static <T extends Comparable<T>> T max(List<T> d) { ... }
publicstatictmax(列表d){…}
致:
public static编译错误是什么?类型C中的方法max(List)不适用于参数(List)。List什么类型的数据可以Arrays.asList(LocalDate.of(2014,1,1),LocalDate.of(2015,2,2))
return?@PradipKharbuja就是这样:您可以在一个列表、一个列表以及基本上在LocalDate的每个超类型中检索此结果。但作为另一个泛型方法的参数,编译器将选择“最佳”匹配类型(T extends Comparable),即此处的ChronoLocalDate。
public static <T extends Comparable<? super T>> T max(List<T> d) { ... }