java.lang.ClassCastException: java.lang.String 不能转换为 [Ljava.lang.Object
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3777334/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object
提问by lakshmi
I'm running the following query. It displays an error message. How to solve this error?
我正在运行以下查询。它显示一条错误消息。如何解决这个错误?
List<Route>routeList=null;
List<?> companyList = session.createSQLQuery ("select name " +
"from company "+
"where company_id= " + companyId).list();
if(companyList.size() <= 0){
//throw(new AppException(1018,ErrorMessages.getString("INVALID_USER_ID")));
}
routeList = new ArrayList<Route>(companyList.size());
Route vgDetails=null;
for (int i = 0; i < companyList.size(); i++) {
vgDetails = new Route();
Object[] row = (Object[])companyList.get(i);
vgDetails.setRouteName ((String)row[0]);
routeList.add(vgDetails);
}
session.getTransaction().commit();
return routeList;
}
The errror is:
错误是:
java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object;
at com.claystone.server.user.UserListServiceImpl.getParticipantsDestination(UserListServiceImpl.java:902)
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 com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:527)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:166)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:86)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
采纳答案by Ronald Wildenberg
You can just write:
你可以只写:
vgDetails = new Route();
vgDetails.setRouteName ((String)companyList.get(i));
companyList
is already a list of strings because you select just one column.
companyList
已经是一个字符串列表,因为您只选择了一列。
Additionally, as Thilo's answer also suggests, you can cast your result directly to a List<string>
instead of using List<?>
.
此外,正如 Thilo 的回答所暗示的那样,您可以将结果直接转换为 aList<string>
而不是使用List<?>
.
回答by Thilo
Your companyList contains Strings, not Object[].
您的 companyList 包含字符串,而不是 Object[]。
You should write
你应该写
List<String> companyList = (List<String>) session.createSQLQuery (
"select name from company where company_id=?", companyId).list();
for (String routeName: companyList) {
vgDetails = new Route();
vgDetails.setRouteName (routeName);
routeList.add(vgDetails);
}
回答by Buhake Sindi
Hibernate is return an array of String (aka a List of type String)
Hibernate 返回一个字符串数组(又名字符串类型的列表)
List<?> companyList = session.createSQLQuery ("select name " +
"from company "+
"where company_id= " + companyId).list();
Because your query returns a String of names from Company table.
因为您的查询返回 Company 表中的名称字符串。
What you have to do return a List
你必须做什么返回一个列表
List<String> companyList = (List<String>)session.createSQLQuery ("select name " +
"from company "+
"where company_id= " + companyId).list();
Change your error, from this:
改变你的错误,从这个:
vgDetails = new Route();
Object[] row = (Object[])companyList.get(i);
vgDetails.setRouteName ((String)row[0]);
routeList.add(vgDetails);
To this:
对此:
vgDetails = new Route();
vgDetails.setRouteName (companyList.get(i));
routeList.add(vgDetails);
as companyList.get(i)
returns a String.
ascompanyList.get(i)
返回一个字符串。