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 でのみ機能するため、これは十分に汎用的ではありません。