Сравнение значений двух общих чисел - PullRequest
52 голосов
/ 21 апреля 2010

Я хочу сравнить с переменными типа T extends Number. Теперь я хочу знать, какая из двух переменных больше другой или равна. К сожалению, я еще не знаю точный тип, я только знаю, что это будет подтип java.lang.Number. Как я могу это сделать?

EDIT : я попробовал другой способ, используя TreeSet s, который фактически работал с естественным упорядочением (конечно, все подклассы Number реализуют Comparable, за исключением AtomicInteger и AtomicLong). Таким образом я потеряю дублирующиеся значения. При использовании List s, Collection.sort() не примет мой список из-за связанных несоответствий. Очень неудовлетворительно.

Ответы [ 11 ]

0 голосов
/ 21 апреля 2010

Давайте предположим, что у вас есть какой-то метод вроде:

public <T extends Number> T max (T a, T b) {
   ...
   //return maximum of a and b
}

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

public <T extends Number> T max(double a, double b) {
   return (T)Math.max (a, b);
}

Это будет работать для байтов, коротких, целых, длинных и двойных.

Если вы предполагаете, что BigInteger или BigDecimal или смесь чисел с плавающей и двойной точностью могут быть переданы, то вы не можете создать один общий метод для сравнения всех этих типов параметров.

...