Задача: Отсортировать объекты по свойству, которое отмечено пользовательской анотацией
Зашел в тупик во время сравнения двух объектов, не могу ни получить значение свойства с помощю field.get(obj), ни использовыть compareTo(), так как они не работают с обобщ. типами.
P.S. Если данная задача решается всего лишь использованием какого-то интерфейса, пожалуйста посоветуйте где можно о об этом почитать
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
public class ASort<T>{
public void SortByAnatation(ArrayList<T> tList) {
Field[] fields = tList.get(0)
.getClass()
.getFields();
Field anotatedF = null;
for (Field field : fields) {
if(field.isAnnotationPresent(SortAnatation.class)) {
anotatedF = field;
break;
}
}
if(anotatedF == null) {
System.out.println("Not anotated!");
return;
}
boolean isSorted = false;
T buf;
for(;!isSorted;) {
isSorted = true;
for (int i = 0; i < tList.size()-1; i++) {
if(compareBy(tList.get(i), tList.get(i+1), anotatedF) == 1){
isSorted = false;
buf = tList.get(i);
tList.set(i, tList.get(i + 1));
tList.set(i+1, buf);
}
}
}
}
public int compareBy(T o1, T o2, Field compareF) {
Class<?> fType = compareF.getType();
if(fType==Byte.class||fType==Character.class||fType==Long.class||fType==Integer.class
||fType==String.class||fType==Double.class||fType==Boolean.class) {
return (compareF.get(o1)).compareTo(compareF.get(o2)); // Не компилируется,
//оставил для примера
}
}
}
<code lang="java">