Как сравнить дженерики одного типа? - PullRequest
4 голосов
/ 21 марта 2011

Я пытаюсь сравнить два подкласса Number внутри класса с обобщениями. В приведенном ниже коде я пытаюсь сравнить объекты Number внутри экземпляра Datum.

Как сделать так, чтобы оба параметра, передаваемые конструктору Datum, принадлежали к одному и тому же классу, чтобы я мог сравнить то, что, как я знаю, с сопоставимыми типами - например, Float и Float, или длинные и длинные?

Float f1 = new Float(1.5);
Float f2 = new Float(2.5);

new Datum<Number>(f1, f2);

class Datum<T extends Number> {
    T x;
    T y;

Datum(T xNum, T yNum) {

    x = xNum;
    y = yNum;
            if (x > y) {} // does not compile

    }
}

Ответы [ 4 ]

14 голосов
/ 21 марта 2011

Вы можете ограничить его Comparable подклассами Number:

class Datum<T extends Number & Comparable<? super T>> {
  ...

  if (x.compareTo(y) > 0) { ... }
}
3 голосов
/ 21 марта 2011

1001 * попробовать *

if (((Comparable)x).compareTo((Comparable)y)>0) {} 

вместо

if (x > y) {}
1 голос
/ 21 марта 2011

Вы всегда можете сравнить двойные значения

return ((Double)x.doubleValue()).compareTo(y.doubleValue());
1 голос
/ 21 марта 2011

Сравните результат Number#doubleValue() вместо.

if (x.doubleValue() > y.doubleValue()) {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...