在java中动态创建给定数据的对象

时间:2016-11-18 20:18:22

标签: java arraylist

我在java中有一个ArrayList。我从database读取数据,并希望将每一行添加到此arraylist中 我的问题是我不知道一行有多少个参数。例如。如果我从桌上人那里读过,那么一个人有一个firstname, nickname, age,如果我从另一张桌子上读过像玩家那样的数字参数不同。
如何动态创建可以添加数据的对象? 例如,如何动态创建类似这样的内容:Person = {"a", "b", 1},因此我有一个ArrayList<Person>
或者我应该创建ArrayList的ArrayList吗? 提前谢谢!

4 个答案:

答案 0 :(得分:2)

你要求HashMap吗?

Map<String, Object> person = new HashMap<String, Object>();
person.add("a", 1);
person.add("b", ...)

https://www.tutorialspoint.com/java/java_hashmap_class.htm http://beginnersbook.com/2013/12/hashmap-in-java-with-example/

那里有很多好的资源。

答案 1 :(得分:1)

您应该使用HashMap<String, Object>,其中地图的键将是属性名称和Map的值,即与属性关联的值。

Map<String, Object> myPerson = new HashMap<String, Object>();
myPerson.add("name", "doe");
myPerson.add("age", 20L)

或者,您可以使用包含Map的Wrapper类。 通过这种方式,您可以隐藏实现,并且可以向客户端提供自定义方法,例如在没有显式转换的情况下获取值的方法,并且可以为映射表提供名称:

示例:

public class DBObjectMapper{
   private Map<String, Object> map = new HashMap<String, Object>();
   private String tableName;

   private DBObjectMapper(String tableName){
       this.tableName=tableName;
   }

   public add(String key, Object value){
     map.put(key,value);
   }

   public <T extends Object> T get(String key) {
      return (T) map.get(key);
   }

   public String getTableName(){
      return tableName;
   }
}

现在,从映射器中检索值时,客户不需要进行显式转换:

   DBObjectMapper mapper = new DBObjectMapper("person");
   mapper.add("isEnabled", Boolean.valueOf(true);
   mapper.add("name", "doe");
   String mappedTable = mapper.getTableName();
   Boolean b = mapper.get("isEnabled");
   String string = mapper.get("name");

答案 2 :(得分:0)

实际上,您可以为每个人对象存储一个arraylist。像

这样的东西
Person p = new Person;
p.addAttribute(dbValue);

addAttribute方法的作用是:

class Person{
//init myPersonArraylist
....
private void addAttribute(String attribute){
myPersonArraylist.add(attribute);
}
}

答案 3 :(得分:0)

如果您没有打开数据库的先验知识,那么将会有多少行,列或​​列类型。然后我会创建一个ArrayList<ArrayList<String>>并只读取每一行,然后用逗号分隔(或者用你的分隔符)。这样,您就可以根据需要动态调整任意数量的列,这将适用于您正在访问的任何数据库的通用情况。

如果您了解数据库,那么我会为它创建适当的类。在您的示例中Person

class Person {
    String firstName;
    String nickname;
    int age;
}

然后将每一行解析为Person类,并将其添加到ArrayList<Person>