Java的。从抽象集合的ArrayList生成swt.table

时间:2016-05-23 11:53:11

标签: java arraylist

美好的一天。

我的情况如下:

我有一些数据库实体类(AutoDriverBill等)及其一些字段。我可以从我的数据库中获取它们的ArrayList - ArrayList<Auto>ArrayList<Driver>等。

现在我希望能够从我拥有的任何集合中生成swt表。 所以,在我的梦中,它就像是所有课程集合的一种常用方法。

public class TableGenerator{
    public Table generate(Shell shell, ArrayList<? extends IDBEntity> instance){
        //swt.table creation
        //passing data into this table
    }
}

因此。问题是&#34;我可以这样做,所以如果我能怎么做呢? &#34;和#34;这种方式值得实现,或者我应该为不同的类制作不同的方法吗?&#34;。

感谢您提出任何意见和建议。

2 个答案:

答案 0 :(得分:1)

实现此目的的一种方法是使用Visitor Pattern

  1. 创建Visitor界面:

    public interface DBEntityVisitor {
      void visit(Auto pAuto);
      void visit(Driver pDriver);
      void visit(Bill pBill);  
    }
    
  2. 转到IDBEntity界面并添加方法:

     void accept(DBEntityVisitor pDBEntityVisitor);
    
  3. 现在转到具体课程AutoBillDriver并实施accept方法:

      @Override
      public void accept(DBEntityVisitor pDBEntityVisitor) {
         pDBEntityVisitor.visit(this);
      }
    
  4. TableGenerator

       public Table generate(Shell shell, ArrayList<IDBEntity> instance){
         DBEntityVisitor lVisitor = new DBEntityVisitor() {
    
         @Override
         public void visit(Auto pAuto) {
            System.out.println("I am a car");
         }
    
         @Override
         public void visit(Driver pDriver) {
            System.out.println("I am a driver");        
         }
    
         @Override
         public void visit(Bill pBill) {
            System.out.println("I am a bill");
         }
      };
      for(IDBEntity lInstance : instance){
        lInstance.accept(lVisitor);
      }
    }
    

答案 1 :(得分:0)

如果你想要它非常动态,你可以使用Gson给出的内省来制作你的数组JSON数组和对象JSON对象。

Gson gson = new Gson();

List<IDBEntity> l = new ArrayList<>();
l.add(new Auto());
l.add(new Driver());
l.add(new Bill());

String json = gson.toJson(l);
// Just to view if data is alright.
System.out.println(json)

JsonArray a = new JsonParser().parse(json).getAsJsonArray();

// Iterate array
for (JsonElement o: a) {
    // Iterate fields and values of each object
    for (Map.Entry<String, JsonElement> e: ((JsonObject) o).entrySet()) {
        System.out.println(e.getKey());
        System.out.println(e.getValue());
    }
}

现在检查你的对象数组,检查它们的属性以添加列,然后遍历每个对象并将它所具有的属性值添加到列中。