2015-02-19 3 views
0

Если у меня есть класс, который использует шаблон <T>, как сравнить две переменные типа T? Один из моих друзей сказал мне, что вы должны добавить <T extends Comparable<? super T>> в свой класс, чтобы сравнить переменные типа T, но я не знаю, что он умеет. Вот мой класс:Сравнение дженериков в Java

public class SomeClass<T extends Comparable<? super T>> 
{ 
    public SomeClass(){} 

    public T foo(T par, T value) 
    { 
     if(value > par) 
     { 
      return value 
     } 
     else 
     { 
      return par; 
     } 
    } 
} 

И в моем Main.java:

SomeClass<Integer> sc = new SomeClass<Integer>(); 
Integer val1 = 10; 
Integer val2 = 5; 
System.out.println(sc.foo(val1, val2)); 

Ошибка я получаю:

error: bad operand types for binary operator '>' if(value > par) 

ответ

3

Ваш T реализует Comparable, поэтому вы должны использовать его метод compareTo().

if (value.compareTo(par) > 0) { 
    .... 
} 

Кроме того, обратите внимание, что в Java он называется Generics, а не шаблоны, и довольно сильно отличается от C++ шаблонов (более слабых и менее сложных из C++ версии). Одно важное отличие заключается в том, что он не работает на примитивах, только на объектах - поэтому, если вы хотите использовать SomeClass<int> - это невозможно. (Однако вы можете использовать SomeClass<Integer>).

Также обратите внимание, что вы не можете назначить

T = 0; 

Поскольку T является объектом.

+0

CompareTo (par) работал. И спасибо за подсказку Я только начал Java на прошлой неделе. И ошибка 'T = 0' была ошибкой, зафиксирует ее в коде. –

2

> оператор может быть использован только на примитивов, а не на объекты. Для сравнения объектов необходимо использовать метод compareTo.

Смежные вопросы