在一个表达式中将ArrayList<String>转换为String[]?

4
我有一个接受 ArrayList<String> 的构造函数,但是想要调用 super 函数并期望传入一个 String[] 数组。我已经尝试过下面的方法,但是会导致类异常 [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
public cool(ArrayList<String> s) {
    super((String[]) s.toArray());
}

我希望能够传递一个 ArrayList<String>cool
谢谢。
编辑:我已经尝试过最近的建议,使用了


super(s.toArray(new String[s.size()]));

但是现在我遇到了以下异常:

实体类必须拥有无参构造函数;嵌套异常为 java.lang.IllegalArgumentException: : 实体类必须拥有无参构造函数。


1
无需强制转换(照常)...请查看API List.toArray() - jahroy
1
哦,所以这是一个被注释的实体。您必须提供一个默认构造函数(没有任何参数的构造函数),以便它可以由您正在使用的任何框架实例化。 - Fritz
@Gamb 哎呀,你说得对。我在很多类中都有这些,但是这个可能是我忘记了!谢谢! - Stephen D
1个回答

13

试试这个:

super(s.toArray(new String[s.size()]));

以上是将 ArrayList 转换为数组的类型安全方式,它不是真正的强制转换,只是一种转换。

关于报告的新错误 - 您必须在错误中提到的实体中声明一个无参构造函数。


1
请注意,这里发生了一些强制类型转换,只是由实现隐藏了。 - arshajii
@Óscar López 谢谢,它解决了我的初始问题。 - Stephen D
1
@StephenD 请看我的编辑,第二个错误与第一个错误没有直接关系,而是所有实体对象必须遵循的规则:它们必须明确地具有无参数的构造函数。 - Óscar López

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接