2014-02-12 46 views
-1

的Eclipse/Java的如何閱讀Java的ArrayList的分項

List<Composicao> itemProdutoLista = compPrecoServico.buscar(Composicao.queryname, parameters); 

compPrecoServico接口:

@Local 
public interface ComposicaoServico extends GenericoServico<Composicao, Integer> { 

} 

GenericoServico有:

List<T> buscar(String query, Map<String, ?> parametros); 

queryA是:

@NamedQuery(name = "existingComposicao", query= " SELECT composicao.valortotal,composicao.id FROM Composicao composicao 

enter image description here

的問題是:如何能讀成兩個不同的變量兩個值(BigDecimal和整數)


  • 香港專業教育學院嘗試沒有沒有成功:

Composicao itemProdLista = itemProdutoLista.get(0); 
vlUnit = itemProdLista.getResultRS_valortotal(); 

但我得到這個錯誤在這一行:Composicao itemProdLista = itemProdutoLista.get(0);

Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to Composicao 
+0

檢查你存儲在你的'List'中。 –

+0

Im存儲有關打印屏幕的值。在[0]和[1]位置。我不知道如何閱讀他們@SotiriosDelimanolis – Al2x

+0

你必須爲'Composicao'類中的那些值獲取吸氣劑......? –

回答

1

首先,你的代碼沒有多大意義:

List<Composicao> itemProdutoLista = new ArrayList<Composicao>(); 
itemProdutoLista = ... 

這是完全無用的創建一個新的ArrayList和它,如果你之後重新分配另一個列表分配給您的變量。其次,您的屏幕截圖顯示該方法返回的列表不是List<Composicao>,但實際上是List<Object[]>(或List<ArrayList>,如果出現錯誤消息,則爲List<ArrayList>)。所以你應該修正這個函數(我猜是執行一個JPA查詢),或者改變你的變量的類型來反映現實。

要獲得更多幫助,您應該顯示返回列表的函數的代碼。這是問題所在。

編輯:

您的查詢

SELECT composicao.valortotal,composicao.id FROM Composicao composicao 

這樣的查詢不返回Composicao的情況下,因爲它選擇兩個領域:valortotalid。它會返回Composicao的情況下,如果查詢

SELECT composicao FROM Composicao composicao 

如果查詢你要真的是,在這樣的查詢返回List<Object[]>,在列表中的每個Object[]包含兩個要素:valortotalid。所以你的代碼應該是:

List<Object[]> itemProdutoLista = ...; 
+0

列表查詢(字符串查詢,地圖 parametros); @JB Nizet – Al2x

+0

打印屏幕具有我需要的正確值。我在這一行中得到錯誤:Composicao itemProdLista = itemProdutoLista.get(0); – Al2x

+0

您傳遞的查詢不是返回Composicao實例的查詢。這是一個返回Object []'實例的查詢。向我們顯示查詢。列表的類型應該是'List '。 –

0

您有清單列表。

itemProdutoLista第一元件保持列表,而不是一個Composicao對象

錯誤的位置大概是在這裏:

/*function that returns one row list only like that below */ 

由於泛型僅在編譯時進行評價的方法可能返回錯誤的事情列表中。

+0

好的。所以我怎麼讀取子列表項? – Al2x

+0

順便說一句,當試圖插入'List'而不是'Composicao'對象時,他不應該得到編譯錯誤嗎? –

+0

只有被調用方法的簽名也使用泛型。在這段代碼中,你只能防止你的代碼在列表中插入「正確的東西」。 – edubriguenti

0

instanceof to rescue。 這不是一個好主意,但是這裏有一些代碼:

List<Object> blammy = new ArrayList<Object>(); 

BigDecimal kapow = BigDecimal.valueOf(93); 
Integer schmarr = Integer.valueOf(10); 

blammy.add(kapow); 
blammy.add(schmaar); 

for (Object current : blammy) 
{ 
    if (current instanceof BigDecimal) 
    { 
     BigDecimal currentBigDecimal = (BigDecimal)current; 

     ... use currentBugDecimal 
    } 
    else if (current instanceof Integer) 
    { 
     Integer currentInteger = (Integer)current; 

     ... use currentInteger 
    } 
    else 
    { 
     ... handle unexpected type. 
    } 
}