我正在尝试将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成员? (我不想改变参数的类型)。你有什么想法吗?
答案 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... causes
与causes[]
相同。如果要将其转换为列表,则需要声明一个新变量:
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
中的任何一个。