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

时间:2015-03-26 22:09:10

标签: java arrays collections type-conversion

我正在尝试将Cause数组转换为Cause的ArrayList,并且我得到此编译器错误:

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));
    }

}

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

4 个答案:

答案 0 :(得分:7)

构造函数中赋值的左侧是参数,而不是字段。 (还有一个{失踪了)。您可以通过添加this.

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

    private List<Cause> causes;

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

}

答案 1 :(得分:3)

混淆错误是由于名称阴影(即在同一范围内对两个不同的东西使用相同的名称);你有causes作为你的类的一个字段,也作为构造函数的参数。如图所示重命名,一切都很好:

public class MyException extends Exception {

    private List<Cause> causes;

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

更新:正如评论正确指出的那样,您通常会在使用this时使用public class MyException extends Exception { private List<Cause> causes; public MyException(Cause... causes) { this.causes = new ArrayList<Cause>(Arrays.asList(causes)); } } 对字段进行显式化时解决此问题:

{{1}}

答案 2 :(得分:3)

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

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

或者只是显式引用您的成员类变量

   this.causes = Arrays.asList(causes);

答案 3 :(得分:0)

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

private List<Cause> causes;  

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

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

尝试从声明或方法参数更改causes中的任何一个。