一般的な範囲に基づいて、さまざまなクラスのデータの一般的なフィルターを実装しようとしています。最初の反復では、これは列の名前と列内のデータのクラスがわかっている JTable 用です。この場合、フィルター ビューは次のようになります。
ColumnTitle コンボボックス: コンボボックスである/そうではない: =、>、<、テキストボックスの最小値、テキストボックスの最大値の間
テーブルの列は、XML ビルダーで指定された String、double、int などである場合があり、他の列に基づいてフィルター処理するこれらの行が複数ある場合があります。[明らかに、これらの多くは世界に存在します。]
Range
基本的に次のようなクラスを使用して、これを RowFilters に結び付けたいと思います。
public class Range<T extends Comparable<? super T>> {
T low;
T high;
public Range(T aLow, T aHigh) {
low = aLow;
high = aHigh;
}
public boolean includes(T value) {
boolean result = true;
if ((getLow() != null) && (getLow().compareTo(value) > 0)) {
return false;
}
if ((getHigh() != null) && (getHigh().compareTo(value) < 0)) {
return false;
}
return true;
}
public T getLow() {
return low;
}
public void setLow(T low) {
this.low = low;
}
public T getHigh() {
return high;
}
public void setHigh(T high) {
this.high = high;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Range = ").append(low).append(" to ").append(high);
return sb.toString();
}
}
私の考えは、本質的に(以下の実際のコードではなく)次のリストを作成することです。
class Filter {
Range<?> range;
String name;
Class<?> filterClass;
}
RowFilter
個々のフィルター ビュー (またはコントローラー) でクラス比較を行い、適用する必要があるときにこれらを変換します。
私が取り組んでいるコード ベースには、何百ものステートメントがあり、次のように単純に嫌いです
if (bob instanceof Person)
。
それを回避しようとして、ジェネリックとクラスのキャストで問題が発生しています。
これはジェネリック型の消去で避けられない問題ですか? もしそうなら、どこにでも散らばっているクラステストを回避する適切な回避策はありますか?
残念ながら私はできません: - Guava または Java 以外のものを使用します (6 でも)。- XML ベースのテーブル ビルダー全体をやり直します。- データベースを使用する
テーブルやデータベースを持っていて、コードのコンパイル時にデータの説明がわからないアプリケーションはたくさんあるはずです。