日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[Ljava.lang.Object; cannot be cast to com.gxuwz.check.entity.SysClasses

發(fā)布時(shí)間:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Ljava.lang.Object; cannot be cast to com.gxuwz.check.entity.SysClasses 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天在寫ssh項(xiàng)目的時(shí)候遇到了這樣一個(gè)問(wèn)題,我在數(shù)據(jù)庫(kù)通過(guò)連表查詢A老師下的所有班級(jí)的時(shí)候,把查出來(lái)的所有內(nèi)容(所有字段)放到List里面,代碼如下:

/**

* @title: queryClasses* @description: 查詢教師下的所有班級(jí)* @param user*/ @Override public List<SysClasses> queryClasses(String userid) {String hql = "from SysClasses c,SysTeacher t " + "where c.userId = t.userId and c.userId = ?";Session session = getSession();Query query = session.createQuery(hql);query.setString(0, userid);List<SysClasses> list = query.list();session.close();return list; }

然后在前臺(tái)用el表達(dá)式,即對(duì)象.屬性的方法 ${list.className} 取值得時(shí)候總是顯示不出來(lái)數(shù)據(jù),而且還有報(bào)錯(cuò),報(bào)錯(cuò)信息如下:(前提是我只想要className屬性,只有SysClasses表中有而SysTeacher表中沒(méi)有)

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.gxuwz.check.entity.SysClassescom.gxuwz.check.action.LoginAction.execute(LoginAction.java:69)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)

報(bào)錯(cuò)的意思是:Object類型不能夠轉(zhuǎn)換成這個(gè)實(shí)體類SysClasses類型。
之后就開(kāi)始研究打斷點(diǎn)測(cè)試
先添加兩行代碼進(jìn)行測(cè)試,代碼如下:

@Override
public List queryClasses(String userid) {

String hql = "from SysClasses c,SysTeacher t " + "where c.userId = t.userId and c.userId = ?";Session session = getSession();Query query = session.createQuery(hql);query.setString(0, userid);List<SysClasses> list = query.list();for(int i = 0;i<list.size();i++) {list.get(i);}session.close();return list; }

斷點(diǎn)測(cè)試如下:

我們發(fā)現(xiàn)通過(guò)連表查詢之后返回的Object對(duì)象,這是為什么呢?因?yàn)橹挥蠴bject才能夠存儲(chǔ)任意類型數(shù)據(jù)和多個(gè)字段的數(shù)據(jù),何況這里有兩張表的數(shù)據(jù)。

下面詳細(xì)說(shuō)一下:

如圖上標(biāo)記的1所示:
Object[10],Object根據(jù)表中有的數(shù)據(jù)自動(dòng)分配足夠的10個(gè)空間

如圖上標(biāo)記的2所示:
[0],代表的是上面10個(gè)下標(biāo)中的0號(hào)下標(biāo)的值
[0]=Object[2],意思是把Object[2]中的數(shù)據(jù)賦值給上面1中的Object[0]:這里體現(xiàn)了分表存儲(chǔ),下面再說(shuō)

如圖上標(biāo)記的3、4所示:
Object[2]中又存儲(chǔ)著兩個(gè)實(shí)體類SysClasses和SysTeacher

以上證明,有幾張表的話就自動(dòng)劃分成幾個(gè)實(shí)體類存放到Object中:
我們可以做一下測(cè)試,看到底是不是這樣自動(dòng)分配的:

果然,在我又新添加一個(gè)查詢列表SysUserLogin之后,下面箭頭處的Object有3條數(shù)據(jù)了
所以說(shuō)呢,我們?cè)谇芭_(tái)用List對(duì)象.屬性的方式是取不出來(lái)的,因?yàn)長(zhǎng)ist對(duì)象是一個(gè)Object類型

jsp頁(yè)面的部分代碼如下:

<s:iterator id="id" value="classSet" var="list"><li><a href="Check_stuList.action" target="right"><span class="icon-caret-right"></span>${list.className}</a></li> </s:iterator>

那到底怎么樣才能夠取到值呢?怎么樣將Object轉(zhuǎn)換成SysClasses呢?前提說(shuō)好,是不能將Object轉(zhuǎn)換成SysClasses,但是我們可以這樣做

代碼實(shí)例如下:

@Overridepublic List<SysClasses> queryClasses(String userid) {String hql = "from SysClasses c,SysTeacher t " + "where c.userId = t.userId and c.userId = ?";Session session = getSession();Query query = session.createQuery(hql);query.setString(0, userid);List<Object> list = query.list();//將查出來(lái)的某一條記錄放到Object中List<SysClasses> slist = new ArrayList<SysClasses>();SysClasses c = new SysClasses();for(int i=0;i<list.size();i++){Object[] a = (Object[]) list.get(i);//list.get(0)的時(shí)候包括a[0]SysClasses a[1]SysTeacher,如之前圖的講解slist.add((SysClasses) a[0]);//將list.get(0)中的兩個(gè)實(shí)體類分別放到Object[0]和Object[1]中,每一次都將SysClasses取出來(lái)即a[0],放到List<SysClasses> slist}session.close();return slist;}

代碼詳細(xì)講解:

我們的目的是每次都取到紅色箭頭處這個(gè)實(shí)體類:上代碼一行一行來(lái)

第一輪for循環(huán)
Object[] a = (Object[]) list.get(i);

list.get(0)的值為 [0]=Object[2] (id=159)這個(gè)整體,這里面還有值。將其賦給a對(duì)象

slist.add((SysClasses) a[0]);

a[0]為SysClasses下面的所有數(shù)據(jù)


最終添加到slist這個(gè)List類型的對(duì)象中

第二輪for循環(huán)
Object[] a = (Object[]) list.get(i);

list.get(1)的值為 [1]=Object[2] (id=160)這個(gè)整體,這里面還有值。將其賦給a對(duì)象

slist.add((SysClasses) a[0]);

a[0]為SysClasses下面的所有數(shù)據(jù)

最終添加到slist這個(gè)List類型的對(duì)象中

以此類推哈!

這樣我們就能取到值了

如果此文對(duì)你有幫助記得點(diǎn)贊哦!轉(zhuǎn)載請(qǐng)附上博主文章地址
https://mp.csdn.net/mdeditor/103286771

總結(jié)

以上是生活随笔為你收集整理的[Ljava.lang.Object; cannot be cast to com.gxuwz.check.entity.SysClasses的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。