2017-04-08 146 views
0

我需要創建一個對象的數組列表,但需要從變量中加載對象的名稱。 我有這個...如何從變量創建數組列表<Object>?

public store_table(String table_name){  
switch (table_name) 
    case: "table_1" table_1_list=new ArrayList<Person>; break; 
    case: "table_2" table_2_list=new ArrayList<Car>; break; 
... 
} 

,我需要這樣的創造的東西:從數據庫使用ORM幾個表

list=new ArrayList<table_name>; 

即時閱讀數據。所以table_name也是對象的名字。

所以這裏是更多的代碼...

store_into table(String table_name) throws SQLException{ 
query="SELECT * FROM " +table_name+" OFFSET"+offset+ " FETCH NEXT 50 ROOWS ONLY"; 
Statement st= conn.createStetement(); 
Resulset rs= st.executeQuery(query); 
while(rs.next()){ 
case "Person": 
     person=new Person (rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getString(5),rs.getString(6)); 
     person_list.add(person); 

     break; 
    case "Car": ... 
    break; 

... 
} 
} rs.close(); 
st.close(); 
switch (table_name){ 
    case "Person": 
     Singleton.getInstance().populate_tabule(person_list); 
     break; 
    case "car": ... 
    break; 
} } 

,這裏是我如何打印行

public void populate_table(ArrayList<Person> list){ 


    Object[] row=new Object[6]; 
    for(int i=0;i<offset_size;i++){ 
     row[0]=list.get(i).getId(); 
     row[1]=list.get(i).getName(); 
     row[2]=list.get(i).getBirthday(); 
     row[3]=list.get(i).getEmail(); 
     row[4]=list.get(i).getAddress(); 
     row[5]=list.get(i).getSalary(); 

     view.setModel(row); 
    } 
+0

試試這個list = new ArrayList <(Object)table_name>; –

+0

您使用的是什麼ORM? – prasanth

+0

@金屬薩爾蒙,請通過我的答案,讓我知道它是否解決了你的問題。 –

回答

-1

你可以做,你都可能的ArrayList已經作出,然後一個HashMap鍵值是帶有表名的字符串。

類似:

private final Map<String, ArrayList> TableArrays = new HashMap<>(); 

TableArrays.put("Person" , new ArrayList<Person>); 
TableArrays.put("Car", new ArrayList<Car>); 

ArrayList getTableArray(String table_name) { 
    return TableArrays.get(table_name); 
} 
-1

所以,你要創建ArrayList小號Object類型小號table_name

switch具有相當比較實際值小於分配給值的限制對象。
例如,你不允許做

switch (table_name) { 
    case temp1: 
     System.out.println("This is test1"); 
     break; 
    case temp2: 
     System.out.println("This is test2"); 
     break; 
    } 

您是允許做

switch (table_name) { 
    case "test1": 
     System.out.println("This is test1"); 
     break; 
    case "test2": 
     System.out.println("This is test2"); 
     break; 
    } 

我建議從switch移動到多個if-else語句來解決這個目的。

所以,你可能有一個Person類作爲

class Person { 
    int data; 

    Person(int data) { 
     this.data = data; 
    } 
} 

和汽車類作爲

class Car { 
    int data; 

    Car(int data) { 
     this.data = data; 
    } 
} 

因此,您將在下面的時尚

public class Store_table { 
    List<Person> personList; 
    List<Car> carList; 

    Store_table(Object o) { 
     if (o instanceof Person) { 
      personList = new ArrayList<Person>(); 
     } else if (o instanceof Car) { 
      carList = new ArrayList<Car>(); 
     } 
    } 
... 
+0

謝謝,但這對我來說不算是污染......開關工作正常......但我必須使用開關很多次,這是我的問題。在你的解決方案中,我將不得不使用if clausule這麼多次。 – MetalSalmon

+0

嗨@MetalSalmon,我很想知道你的問題是否已經解決,你是如何接近它的。 –

0

你的問題創造的ArrayList是你的整個「精神」模型是不足的。一旦你開始創建名爲a1,a2,...的變量,然後編寫代碼,對每個變量明確地做事情 - 很可能是你做錯了。

從這個意義上說:你不使用列表,因爲你可以;因爲你想過要在現實世界中建立一個你想表達的思維模型。

首先,你應該使用某種ORM框架來爲你做這樣的事情(你的代碼是什麼都沒有,但試圖建立類似的功能你自己)。

除此之外;正如所說:你應該退後一步並改進你的對象模型。