拥有一个抽象静态方法的想法是,您不能直接为该方法使用该特定抽象类,但只允许一阶导数实现该静态方法(或对于泛型:实际类您使用的泛型)。
这样,您可以创建例如 sortableObject 抽象类甚至接口
使用(自动)抽象静态方法,它定义了排序选项的参数:
public interface SortableObject {
public [abstract] static String [] getSortableTypes();
public String getSortableValueByType(String type);
}
现在您可以定义一个可排序的对象,该对象可以按所有这些对象相同的主要类型进行排序:
public class MyDataObject implements SortableObject {
final static String [] SORT_TYPES = {
"Name","Date of Birth"
}
static long newDataIndex = 0L ;
String fullName ;
String sortableDate ;
long dataIndex = -1L ;
public MyDataObject(String name, int year, int month, int day) {
if(name == null || name.length() == 0) throw new IllegalArgumentException("Null/empty name not allowed.");
if(!validateDate(year,month,day)) throw new IllegalArgumentException("Date parameters do not compose a legal date.");
this.fullName = name ;
this.sortableDate = MyUtils.createSortableDate(year,month,day);
this.dataIndex = MyDataObject.newDataIndex++ ;
}
public String toString() {
return ""+this.dataIndex+". "this.fullName+" ("+this.sortableDate+")";
}
// override SortableObject
public static String [] getSortableTypes() { return SORT_TYPES ; }
public String getSortableValueByType(String type) {
int index = MyUtils.getStringArrayIndex(SORT_TYPES, type);
switch(index) {
case 0: return this.name ;
case 1: return this.sortableDate ;
}
return toString(); // in the order they were created when compared
}
}
现在你可以创建一个
public class SortableList<T extends SortableObject>
可以检索类型,构建弹出菜单,以通过从该类型获取数据来选择要对列表进行排序和度假函数的类型,以及Hainv Add函数,即在选择排序类型时, 可以自动排序新项目。
注意SortableList的实例可以直接访问“T”的静态方法:
String [] MenuItems = T.getSortableTypes();
必须使用实例的问题是 SortableList 可能还没有项目,但已经需要提供首选排序。
欢呼,
奥拉夫。