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

Dad*_*box 29 java collections casting object

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

private HashSet data;

...

public DataObject[] getDataObjects( )
{
    return (DataObject[]) data.toArray();
}
Run Code Online (Sandbox Code Playgroud)

......这是什么使得DOES的工作方式:

public DataObject[] getDataObjects( )
{
    return (DataObject[]) data.toArray( new DataObject[ Data.size() ] );
}
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*lin 38

由于toArray()创建对象的数组,你不能让Object[]DataObject[]铸造它而已. toArray(DataObject[])创建一个数组DataObject.

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

关于这个toArray(DataObject[])电话有趣的事情:你不必把"a"数组做得足够大,所以你可以随意调用它toArray(new DataObject[0]).

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

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