将数组转换为列表时出现编译器错误?
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... causes
与causes[]
相同。如果要将其转换为列表,则需要声明一个新变量:
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
。
我正在尝试将 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... causes
与causes[]
相同。如果要将其转换为列表,则需要声明一个新变量:
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
。