将数组转换为列表时出现编译器错误?

Compiler error while converting array to list?

我正在尝试将 Cause 数组转换为 ArrayList Cause,但出现此编译器错误:

Type mismatch: cannot convert from ArrayList<Cause> to Cause[]

这是实现:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MyException extends Exception

    private List<Cause> causes;

    public MyException(Cause... causes) {
        causes = new ArrayList<Cause>(Arrays.asList(causes));
    }

}

如何将我作为参数接收的原因转换为列表成员? (我不想更改参数的类型)。你有什么想法吗?

令人困惑的错误是由于名称遮蔽(即在同一范围内对两个不同的事物使用相同的名称)造成的;你有 causes 作为你的 class 的字段,也作为构造函数的参数。如图所示重命名,一切正常:

public class MyException extends Exception {

    private List<Cause> causes;

    public MyException(Cause... cs) {
        causes = new ArrayList<Cause>(Arrays.asList(cs));
    }
}

Update:正如评论正确指出的那样,您通常通过在引用该字段时向编译器显式地解决这个问题,使用 this:

public class MyException extends Exception {

    private List<Cause> causes;

    public MyException(Cause... causes) {
        this.causes = new ArrayList<Cause>(Arrays.asList(causes));
    }
}

参数String... causescauses[]相同。如果要将其转换为列表,则需要声明一个新变量:

  List<Cause> causesList = Arrays.asList(causes);

或者简单地明确引用您的成员 class 变量

   this.causes = Arrays.asList(causes);

构造函数中赋值的左侧是指参数,而不是字段。 (还缺少 {)。您可以通过添加 this.:

来解决此问题
public class MyException extends Exception {

    private List<Cause> causes;

    public MyException(Cause... causes) {
        this.causes = new ArrayList<Cause>(Arrays.asList(causes));
    }

}

您已将 cause 声明为 List<Cause> -

private List<Cause> causes;  

并尝试在此处将 causes(已经是 arrayList)转换为数组 -

causes = new ArrayList<Cause>(Arrays.asList(causes));  

尝试从声明或方法参数中更改 causes