Идея наличия абстрактного статического метода заключается в том, что вы не можете использовать этот конкретный абстрактный класс непосредственно для этого метода, но только первая производная будет иметь возможность реализовать этот статический метод (или для обобщений: фактический класс универсальный вы используете).
Таким образом, вы можете создать, например, абстрактный класс 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>
, который может извлекать типы, создавать всплывающее меню, чтобы выбрать тип для сортировки и обрабатывать список, получая данные из этого типа, а также иметь функцию добавления, которая, когда тип сортировки был выбран , может автоматически сортировать новые элементы в.
Обратите внимание, что экземпляр SortableList может напрямую обращаться к статическому методу «T»:
String [] MenuItems = T.getSortableTypes();
Проблема с необходимостью использования экземпляра заключается в том, что в SortableList, возможно, еще нет элементов, но уже требуется обеспечить предпочтительную сортировку.
Cheerio,
Olaf.