美好的一天。
我的情况如下:
我有一些数据库实体类(Auto
,Driver
,Bill
等)及其一些字段。我可以从我的数据库中获取它们的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;。
感谢您提出任何意见和建议。
答案 0 :(得分:1)
实现此目的的一种方法是使用Visitor Pattern
。
创建Visitor
界面:
public interface DBEntityVisitor {
void visit(Auto pAuto);
void visit(Driver pDriver);
void visit(Bill pBill);
}
转到IDBEntity
界面并添加方法:
void accept(DBEntityVisitor pDBEntityVisitor);
现在转到具体课程Auto
,Bill
和Driver
并实施accept
方法:
@Override
public void accept(DBEntityVisitor pDBEntityVisitor) {
pDBEntityVisitor.visit(this);
}
在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());
}
}
现在检查你的对象数组,检查它们的属性以添加列,然后遍历每个对象并将它所具有的属性值添加到列中。