【问题标题】:java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object;java.lang.ClassCastException:java.lang.String 无法转换为 [Ljava.lang.Object;
【发布时间】:2016-09-05 18:49:13
【问题描述】:

我正在尝试使用休眠访问给定用户名的朋友列表。这是我的服务类,其中 fetchListOfFriends 函数用于将通用列表转换为 FriendsDetails 类型的 Arraylist。

@Service
@Transactional
public class DetailsServiceImpl implements DetailsService {
@Autowired
private DetailsDao detailsDao;
@Override
public List<FriendsDetails> fetchListOfFriends(String name) {

    @SuppressWarnings("rawtypes")
    List listOfFriends=detailsDao.fetchListOfFriends(name);
    List<FriendsDetails> friendList= fetchListOfFriendss(listOfFriends);
    if(listOfFriends==null){
        System.out.println("Empty and null list");

    }
    System.out.println("size of friendList" + listOfFriends.size());
    return friendList;
}
private List<FriendsDetails> fetchListOfFriendss(@SuppressWarnings("rawtypes") List genericList) {

    @SuppressWarnings("unchecked")
    List<Object> result = (List<Object>) genericList; 
    Iterator<Object> itr = result.iterator();
    List<FriendsDetails> listOfFriend= new ArrayList<FriendsDetails>();
    while(itr.hasNext()){
       Object[] obj = (Object[]) itr.next();
       System.out.println(obj.toString());
       String userName = String.valueOf(obj[0]); 

       FriendsDetails obj1= new FriendsDetails();
       obj1.setFriendName(userName);

       listOfFriend.add(obj1);
    }
    return listOfFriend;
}

DetailsDaoImpl.java

@Autowired
private SessionFactory sessionFactory;
@SuppressWarnings("rawtypes")
@Override

 public List fetchListOfFriends(String name) {
    Session session=sessionFactory.getCurrentSession();
    String queryToFetchFriends="Select name,presenceStatus from UserPresence where name in (Select friendName from Friends where name='"+name+"')";
    List listOfFriends=session.createSQLQuery(queryToFetchFriends).list();
    return listOfFriends;
}

日志.txt

May 22, 2016 1:24:11 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [springmvc] in context with path        [/Testing] threw exception [Request processing failed; nested exception is        java.lang.ClassCastException: java.lang.String cannot be cast to     [Ljava.lang.Object;] with root cause
 java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object;
at com.tcs.Service.FriendServiceImpl.searchFriend(FriendServiceImpl.java:61)
at com.tcs.Service.FriendServiceImpl.searchFriend(FriendServiceImpl.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

【问题讨论】:

  • System.out.println(obj.toString()); 行在控制台中打印什么?
  • 哪个方法抛出异常,哪一行导致 ClassCastException?
  • @chsdk 不,它不能打印任何东西.. 直到创建一个新列表'listOfFriend' 代码正在执行.. 在 while 循环内有一些错误...
  • @alexanderific 第二种方法.. while 循环无法运行
  • 根据stacktrace,问题可能出在第61行的FriendServiceImpl。

标签: spring hibernate list arraylist


【解决方案1】:

一切都应该正常工作。

问题显然是List listOfFriends 是List&lt;String&gt;,而不是List&lt;Object[]&gt;。很奇怪,因为Select name,presenceStatus from UserPresence 应该返回List&lt;Object[]&gt;。

也许 Spring 设置了不正确的 @Autowired private DetailsDao detailsDao; 实现。

试试这个代码。这应该适用于List&lt;String&gt;

private List<FriendsDetails> fetchListOfFriendss(List<?> genericList) {
            Iterator<?> itr = genericList.iterator();
            List<FriendsDetails> listOfFriend = new ArrayList<FriendsDetails>();

            while (itr.hasNext()) {
                Object obj = itr.next();
                String userName = String.valueOf(obj);
                System.out.println(userName);

                FriendsDetails obj1 = new FriendsDetails();
                obj1.setFriendName(userName);

                listOfFriend.add(obj1);
            }
            return listOfFriend;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多