我有一些需要在 JTable 中显示的对象(航站楼、跑道、登机口、航空公司、工人等)。我正在尝试构建一个适用于每个集合的 GenericTableModel(与 JTable 一起使用)。问题是其中一些对象中有数据结构,我不想展示这些结构。因此,我通过从集合中获取第一个对象并询问其声明的字段来获取列名,这些字段不能从 AbstractMap 或 Collection 类中分配。这似乎对我有用,到目前为止我只得到了我需要的字段。当我尝试向工人展示时,问题就开始了。我有一个 W_Worker 抽象类,其中包含工人的大部分字段,并且我有不同的工人,例如 W_Manager、W_FuelWorker 等……每个子类只有 1 或 2 个字段,
如何在方法的开头确定该类是否扩展了另一个类并使其首先获取这些字段?
如果这不足以理解,我将提供代码。提前致谢, 塔尔
编辑:添加代码。
public String[] getColumnName(Collection<T> collection){
Field fields[] = null;
String fieldsNames[];
ArrayList<String> desiredFields = new ArrayList<>();
for(Object o : collection){
fields = o.getClass().getDeclaredFields();
if (o instanceof W_Worker){
Field[] superFields = o.getClass().getSuperclass().getDeclaredFields();
Field[] result = new Field[superFields.length + fields.length];
System.arraycopy(superFields, 0, result, 0, superFields.length);
System.arraycopy(fields, 0, result, superFields.length, fields.length);
fields = result;
}
break;
}
fieldsNames = new String[fields.length];
for(int i = 0; i<fields.length ;i++){
if (!Collection.class.isAssignableFrom(fields[i].getType()) && !AbstractMap.class.isAssignableFrom(fields[i].getType())){
fieldsNames[i] = fields[i].getName();
}
}
for(String field : fieldsNames){
if (field != null){
desiredFields.add(field);
}
}
String newFields[] = new String[desiredFields.size()];
return desiredFields.toArray(newFields);
}
正如你所看到的,我目前正在使用 instanceof,但这还不够通用,因为它只适用于 W_Worker。