2012-05-11 3 views
1

에 입력 목록 캐스팅이 내 방법입니다자바 - 배열

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) 

입니까?

답변

6

시도 :

return itemList.toArray(new AuctionItem[itemList.size()]); 

당신이 쓴 코드의 문제가 itemList.getClass() 클래스 LinkedList를 반환한다는 것입니다. 그래서 Array.newInstance() 메서드는 LinkedList[]을 만들고, 다음은 AuctionItem[]으로 타입을 변환하려고합니다. 이 두 유형은 할당에 호환되지 않으므로 ClassCastException을 던집니다.

1

itemList.getClass()은 LinkedList이기 때문에 LinkedList.class을 반환합니다. itemList.peek().getClass()은 목록에 하나 이상의 요소가있는 경우에만이 문제를 해결합니다.

왜 그냥 :

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