如何从变量创建arraylist <object>?

时间:2017-04-08 23:05:04

标签: java arraylist orm

我需要创建一个对象的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); 
    }

3 个答案:

答案 0 :(得分:0)

你的问题是你的整个&#34;心理&#34;模型不足。一旦你开始创建名为a1,a2,...的变量,然后编写为每个变量明确地执行操作的代码 - 很可能你做错了。

从这个意义上说:你不能使用名单,因为你可以;因为你想要建立一个你想要表达的现实世界方面的心理模型。

首先,您应该使用某种ORM框架为您做这些事情(您的代码只不过是尝试自己构建类似的功能)。

除此之外;如上所述:你应该退后一步,改进你的对象模型。

答案 1 :(得分:-1)

你可以创建一个HashMap,你已经拥有了所有可能的ArrayLists,然后键值是一个带有表名的字符串。

类似的东西:

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

答案 2 :(得分:-1)

因此,您要创建类型为ArrayList的{​​{1}} s Object s

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语句以解决此问题。

所以你可能有一个Person类

if-else

和Car类一样

class Person {
    int data;

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

因此,您将以下列方式创建ArrayLists

class Car {
    int data;

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