JadeRowan
@JadeRowan

Как сравнивать объекты обобщенного типа?

Задача: Отсортировать объекты по свойству, которое отмечено пользовательской анотацией

Зашел в тупик во время сравнения двух объектов, не могу ни получить значение свойства с помощю 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">
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы