Почему мой код Java не может скомпилироваться? [Java: универсальные методы и параметры ограниченного типа]
Ниже приведен мой Java-код, и он просто не может скомпилироваться. Я не могу понять причину неудачи:
interface Comparable<T>
{
public int compareTo(T o);
}
class MyClass {
public static <T extends Comparable<T>> int method1(T t1, T t2)
{
return t1.compareTo(t2);
}
}
class TestApp1 {
public static void main(String[] args) {
Integer p1 =new Integer(8);
Integer p2 =new Integer(9);
int result = MyClass.method1(p1,p2);
System.out.println("result = " + result);
}
}
Он не компилируется и ошибка:
TestApp1.java:19: error: method method1 in class MyClass cannot be applied to given types;
int result = MyClass.method1(p1,p2);
^ required: T,T found: Integer,Integer reason: inferred type does not conform to upper bound(s)
inferred: Integer
upper bound(s): Comparable<Integer> where T is a type-variable:
T extends Comparable<T> declared in method <T>method1(T,T) 1 error
1 ответ
Я случилось потому, что ваш method1
метод с использованием пользовательских Comparable
Интерфейс, в котором используется Integer java.lang.Comparable
, так method1
выбросит исключение.
Используйте только следующий код:
class MyClass {
public static <T extends Comparable<T>> int method1(T t1, T t2)
{
return t1.compareTo(t2);
}
}
class TestApp1 {
public static void main(String[] args) {
Integer p1 =new Integer(8);
Integer p2 =new Integer(9);
int result = MyClass.method1(p1,p2);
System.out.println("result = " + result);
}
}