обобщенный метод
Всем привет! Прохожу дженерики и не могу их понять. 1) как определить где их использовать? класс, метод, интерфейс? 2) что значит ограничение типов и extends? Что должно быть написано в классе, которым ограничивают?
мне нужно написать метод сравнения любых чисел, ограниченный классом numbers. Метод должен возвращать положительное число - если первое число больше второго, 0 - если числа равны, отрицательное число - если первое число меньше второго.
Написала немного, т.к. не до конца понимаю, что и где использовать
public class Numbers {
}
public interface Comparable<T> {
public int compareTo();
}
public class Comparator<T>{
private T obj;
private T obj2;
public Comparator(T obj, T obj2) {
this.obj = obj;
this.obj2 = obj2;
}
public <T> int compareTo(T obj, T obj2) {
}
}
Буду благодарна за объяснения.
Ответы (1 шт):
Это вы намудрили. Класс Number уже существует, им нужно ограничивать тип. Класс Comparator тоже переписывать не надо. В общем, всю теорию тут сложно изложить, читайте Шилдта. Ну а по задаче, думаю, вам нужно что-то типа этого:
static public <T extends Number & Comparable<T>> int compare(T o1, T o2) {
return o1.compareTo(o2);
}
Все Number имплементят Comparable, поэтому можем прямо у них и вызывать compareTo().
Вызов:
public static void main(String[] args) {
System.out.println(compare(2, 3)); // -1
System.out.println(compare(2.3, 3.2)); // -1
System.out.println(compare(2.3f, 3.2f)); // -1
System.out.println(compare(3, 2)); // 0
System.out.println(compare(3.2, 2.3)); // 0
System.out.println(compare(3.2f, 2.3f)); // 0
System.out.println(compare(3, 3)); // 1
System.out.println(compare(2.3, 2.3)); // 1
System.out.println(compare(2.3f, 2.3f)); // 1
}