将一个Object数组转换为我想要的类的数组

仅供审阅,有人可以快速解释阻止其工作的原因(编译时):

private HashSet data; ... public DataObject[] getDataObjects( ) { return (DataObject[]) data.toArray(); } 

……这是什么使得它的工作方式:

 public DataObject[] getDataObjects( ) { return (DataObject[]) data.toArray( new DataObject[ Data.size() ] ); } 

我不清楚使用铸造(或其他任何东西)的机制是如此。

因为toArray()创建了一个Object数组,并且只能通过强制转换将Object[]转换为DataObject[]toArray(DataObject[])创建一个DataObject数组。

是的,它是Collections类的缺点,也是Generics被用于Java的方式。 你期望Collection.toArray()可以返回一个E数组,但事实并非如此。

关于toArray(DataObject[])调用的有趣之处:你不必使“a”数组足够大,所以你可以使用toArray(new DataObject[0])调用它,如果你愿意的话。

如果你稍后使用.length来获取数组长度,那么调用它就像toArray(new DateObject[0])实际上更好。 如果初始长度很大并且返回了您传递的相同数组对象,那么稍后您可能会遇到NullPointerException

我之前问了一个关于Javagenerics的问题,并指出这个非常有用的FAQ: http : //www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html

为了确保在按照您的意图投射数组时的类型安全性( DataObject[] dataArray = (DataObject[]) objectArray; ),JVM必须检查数组中的每个对象,因此它实际上不是像类型转换那样的简单操作。 我认为这就是为什么你必须传递数组实例,然后toArray()操作填充。