簡體   English   中英

如何創建arraylist <Object> 從變量?

[英]how to create arraylist<Object> from variable?

我需要創建一個對象的arraylist,但需要從變量中加載對象的名稱。 我有這個...

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;
...
}

我需要創建這樣的東西:

list=new ArrayList<table_name>;

我使用ORM從具有多個表的數據庫中讀取數據。 因此,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); 
    }

您的問題是您的整個“心理”模型不足。 一旦開始創建名為a1,a2,...的變量,然后編寫代碼明確為每個變量執行操作,則很可能您做錯了。

從這個意義上說,您不使用列表,因為可以使用; 因為您考慮過要在現實世界中構建要表達的方面的心理模型。

首先,您可能應該使用某種ORM框架為您做這些事情(您的代碼不過是嘗試自己構建類似的功能而已)。

除此之外; 如前所述:您應該退后一步並改進對象模型。

您可以制作一個HashMap,其中已經制作了所有可能的ArrayList,然后鍵值是帶有表名的字符串。

就像是:

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);
}

因此,您要創建類型為table_nameObject ArrayList

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;
    }
}

因此,您將以以下方式創建ArrayLists

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>();
        }
    }
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM