我有一些DTO对象的类层次结构。可以说基本抽象类是AbstractObject,这是空类。 Product类扩展了AbstractObject并具有一些属性,setter,getter。 我有一些逻辑负责对Product对象进行排序:
public enum ProductComparator implements Comparator<Product> {
ROK_SORT_ASC {
@Override
public int compare(Product u1, Product u2) {
return ObjectUtils.compare(u1.getRok(), u2.getRok());
}
},
ROK_SORT_DESC {
@Override
public int compare(Product u1, Product u2) {
return -ObjectUtils.compare(u1.getRok(), u2.getRok());
}
},
NAME_DESC {
@Override
public int compare(Product u1, Product u2) {
return -(ObjectUtils.compare(u1.getFlDyn(), (u2.getFlDyn())));
}
};
public static Comparator<Product> doCompare(final Comparator<Product> other) {
return new Comparator<Product>() {
@Override
public int compare(Product u1, Product u2) {
return other.compare(u1, u2);
}
};
}
public static Comparator<Product> getComparator(final List<ProductComparator> sortOptions) {
if(sortOptions == null ){
throw new IllegalArgumentException("Null list passed to comparator");
}
return new Comparator<Product>() {
@Override
public int compare(Product u1, Product u2) {
for (ProductComparator option : sortOptions) {
int result = option.compare(u1, u2);
if (result != 0) {
return result;
}
}
return 0;
}
};
}
}
这是与比较器的简单复合。
现在,我想使一些方法通用,因此它将能够创建如下列表:
List<AbstractObject> objectsList = new ArrayList<AbstractObject>();
objectsList.add(new Product("...", "...."));
objectsList.add(new Product("...", "...."));
并调用sort方法:
List<ProductComparator> comparators = new ArrayList<ProductComparator>();
comparators.add(ProductComparator.ROK_SORT_ASC);
Collections.sort(objectsList, ProductComparator.doCompare(ProductComparator.getComparator(comparators)));
现在,由于缺乏通用方法,这是不可能的,遗憾的是我在这种情况下无法做到这一点。会有很多对象扩展AbstractObjects,我想自动化一些进程。 我正在运行Java 1.6。禁止铸造物体。