2011-05-07 62 views
5

1)我很奇怪,为什么我不能做到这一点:铸造的ArrayList <String>为String []

ArrayList<String> entries = new ArrayList<String>(); 
entries.add("entry"); 
String[] myentries = (String[])entries.toArray(); 

这有什么错呢? (你可能会忽略第二个代码行,这是不相关的问题)

2)我知道我的目标可以使用此代码来达到:

ArrayList<String> entries = new ArrayList<String>(); 
entries.add("entry"); 
String[] myentries = new String[entries.size()]; 
myentries = entries.toArray(myentries) 

这是该ArrayList转换成的首选方式一个字符串数组?有更好/更短的方式吗?

非常感谢你:-)

回答

13

第一个例子返回Object[]作为列表不知道你想要什么类型的数组,这不能被转换为String[]

可以使第二个与

稍短
+1

谢谢大家的回复,他们都很有帮助。我发现这个答案的措词比其他答案更清楚一点。对档案有一点提醒:你可以从子类转换到超类,但不能反过来。由于Object是String的超类,因此您可以从String转换为Object,但不能反过来。这是基本的东西,你忘了它,如果你不使用它;-) – 2011-05-07 16:21:47

3

通过ArrayList中创建的支持数组是不是一个String数组,它是一个对象数组,这就是为什么你不能投它。

关于情况2.这是将其转换为一个数组的常见方式,但你可以把它少了几分冗长的文字:

String[] myentries = entries.toArray(new String[entries.size()]); 
2
List<String> list = ...; 
String[] array = list.toArray(new String[list.size()]); 
0

条目类型丢失(因为泛型在Java中被删除)。因此,当您执行toArray调用时,它只能返回Object类型,因为它知道List必须包含Objects。所以你可以用你的字符串取回一个Object []。如果你想有一个字符串数组,那么你需要将它传递给toArray方法。通过强制转换,不能缩小数组引用的范围,即不能将对象数组转换为字符串数组。但是你可以采用相反的方式,因为它们是协变的。

相关问题