Java-将类型化列表转换为数组

Java-将类型化列表转换为数组,java,arrays,list,reflection,Java,Arrays,List,Reflection,这是我的方法 public AuctionItem[] getOpenAuctions() throws RemoteException { return itemList.toArray((AuctionItem[]) java.lang.reflect.Array .newInstance(itemList.getClass(), itemList.size())); } 这是我的错误 Exception in thread "main" java.la

这是我的方法

public AuctionItem[] getOpenAuctions() throws RemoteException {

    return itemList.toArray((AuctionItem[]) java.lang.reflect.Array
            .newInstance(itemList.getClass(), itemList.size()));

}
这是我的错误

Exception in thread "main" java.lang.ClassCastException: [Ljava.util.LinkedList; cannot be cast to [LAuction.AuctionItem;
at Auction.AuctionImpl.getOpenAuctions(AuctionImpl.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy0.getOpenAuctions(Unknown Source)
at Seller.SellerMain.main(SellerMain.java:38)
有什么问题吗?

试试:

return itemList.toArray(new AuctionItem[itemList.size()]);
您编写的代码的问题是itemList.getClass返回类LinkedList。因此,Array.newInstance方法正在创建LinkedList[],然后您将尝试将其类型转换为AuctionItem[]。由于这两种类型对于赋值不兼容,它会抛出一个ClassCastException。

请尝试:

return itemList.toArray(new AuctionItem[itemList.size()]);
您编写的代码的问题是itemList.getClass返回类LinkedList。因此,Array.newInstance方法正在创建LinkedList[],然后您将尝试将其类型转换为AuctionItem[]。因为这两种类型对于赋值不兼容,所以它抛出一个ClassCastException。

itemList.getClass返回LinkedList.class,因为它是LinkedList。itemList.peek.getClass将修复此问题,但前提是列表至少有一个元素

为什么不只是:

public AuctionItem[] getOpenAuctions() {
    return itemList.toArray(new AuctionItem[itemList.size()]);
}
itemList.getClass返回LinkedList.class,因为它是LinkedList。itemList.peek.getClass将修复此问题,但前提是列表至少有一个元素

为什么不只是:

public AuctionItem[] getOpenAuctions() {
    return itemList.toArray(new AuctionItem[itemList.size()]);
}