我正在尝试基于通用范围实现各种数据类别的通用过滤器。在第一次迭代中,这是针对 JTable,我们知道列的名称和列中的数据类别。在这种情况下,过滤器视图如下所示:
ColumnTitle comboBox: is/is not comboBox: =, >, < , textBox min, textBox max
其中表列可能是 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
需要应用它们的时间。
我正在使用的代码库有 100 条语句,我完全厌恶这些语句,例如:
if (bob instanceof Person)
...
为了避免这种情况,我遇到了泛型和类转换的问题。
这是泛型类型擦除不可避免的问题吗?如果是这样,是否有一些体面的解决方法可以避免课堂测试分散在各处?
不幸的是,我不能: - 使用 Guava 或 Java 以外的任何东西(甚至 6 个)。- 重做基于 XML 的整个表构建器。- 使用数据库
一定有很多应用程序有一个表或数据库并且在代码编译时不知道数据描述?