在代码编译期间,我遇到了“类型不匹配”问题。其实我不知道为什么不能将List转换为ArrayList。我使用java.util.Collections.singletonList并想转换为List。
我试图将表达式强制转换为ArrayList,但是无法强制转换。
public class AlphabeticShifts {
public static ArrayList<String> DoAlphapeticShifts(ArrayList<String> sentences) {
Collections.sort(sentences, String.CASE_INSENSITIVE_ORDER);
return sentences;
}
public static void main(String[] args){
DoAlphapeticShifts(java.util.Collections.singletonList("Array"));
}
}
例外:
java.lang.Error: Unresolved compilation problems:
The method DoAlphapeticShifts(ArrayList<String>) in the type AlphabeticShifts is not applicable for the arguments (List<String>)
Type mismatch: cannot convert from List<String> to ArrayList<String>
at AlphabeticShifts.main(AlphabeticShifts.java:15)
答案 0 :(得分:1)
ArrayList
是接口List
的子类。因此,我们可以将ArrayList
转换为List
,因为我们知道ArrayList
实现了List
的所有方法(当然,它是一个接口)>
但是,如果我们尝试从List
转换为ArrayList
,List
只是一个接口,所以我们不能降级,因为我们不知道该列表是否是子类总共ArrayList
。
本质上,ArrayList
是List
的特定类型。因此,由于我们不确定List
是否绝对是ArrayList
,因此编译器无法确定这是否有效。
答案 1 :(得分:1)
如果要排序并返回一般的字符串列表,并保留参数的类型,请将方法签名更改为:
public static <L extends List<String>> L DoAlphapeticShifts(L sentences) {