类型不匹配:无法从List <String>转换为ArrayList <String>

时间:2019-07-15 21:09:09

标签: java list arraylist collections

在代码编译期间,我遇到了“类型不匹配”问题。其实我不知道为什么不能将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)

2 个答案:

答案 0 :(得分:1)

ArrayList是接口List的子类。因此,我们可以将ArrayList转换为List,因为我们知道ArrayList实现了List的所有方法(当然,它是一个接口)

但是,如果我们尝试从List转换为ArrayListList只是一个接口,所以我们不能降级,因为我们不知道该列表是否是子类总共ArrayList

本质上,ArrayListList的特定类型。因此,由于我们不确定List是否绝对是ArrayList,因此编译器无法确定这是否有效。

答案 1 :(得分:1)

如果要排序并返回一般的字符串列表,并保留参数的类型,请将方法签名更改为:

public static <L extends List<String>> L DoAlphapeticShifts(L sentences) {