2011-10-27 51 views
0

我是新來java和探索與ebe應用程序與netbeans。如何投射物體數組?

我的代碼:在的UserBean

方法:

public List userList() { 

    Query q = em.createNativeQuery("select username,address from tbuser"); 

    Iterator i = q.getResultList.iterator; 

    ArrayList<UserState> userinfo = new ArrayList<UserState>(); 

    while (i.hasNext()) { 

    Vector result = (Vector) i.next(); // <- HERE 

    UserState us = new UserState(); 

    us.setName((String) result.get(0)); 

    us.setAddress((String) result.get(1)); 

    userinfo.add(us); 

    } 

    return userinfo; 

} 

我用這個方法來構建JSF DataTable,並用netbeans6.5做工精細glassfish2

然而

當我使用同樣的方法,除了我在netbean中將矢量更改爲arraylist 6.9

和glassfish 3我得到了班級演員

運行時異常:對象無法轉換爲java.util.list;

有人知道該怎麼做嗎?謝謝..

+4

此代碼** **不做工精細,有* *至少有** 2個錯誤,導致此代碼無法編譯。 **請**用實際編譯代碼**和**替換它,確保格式正確(閱讀編輯器旁邊的格式幫助)。 –

+2

'Vector'是一個遺留的Java 1.0類。自從Java 1.2(已經超過十年)以來,有了改進的'List'。確保你沒有閱讀古老或不好的教程,比如(不寒而慄)roseindia.net。 – BalusC

+2

......那些我們不說的。 – f1sh

回答

0

我懷疑代碼是這樣工作的,hasNext()等方法缺少圓括號。如果您複製了代碼,請再次這樣做,因爲讓我們猜測您的代碼不會提高答案的質量。

你的問題是你想訪問矢量元素。但Vector中的對象類型不是Vector,而是另一種類型的集合。你想檢索這個Vector的元素(這非常好),但是你試圖將它轉換爲Vector,這會失敗。

由於我看不到在運行時Vector中的哪種類型的對象,因此您可以在開始時在當前錯誤發生的行之前使用System.out.println(i.next().getClass().getCanonicalName());。這將打印Vector元素的類型。

0

嗯,最好是創建DTO直接JPA查詢中:

public List userList() { 

    Query q = em.createNativeQuery("SELECT new UserState(username,address) FROM tbuser"); 

    return q.getResultList(); 

} 

像這樣的東西(這不是驗證碼)