#java #generics
#java #generics
Вопрос:
Извините, может быть, это глупый вопрос, но я не могу найти ответа.
Два параметра generics в методе, может ли один расширять другой?
public class A {
}
public class B extends A {
}
public class C {
}
public class Foo {
public static <R extends A> void f1 (A t, R r){
}
// T and R are generics parameter, R bounds on T
public static <T, R extends T > void f2(T t, R r) {
}
public static void main(String[] args) {
A a = new A();
B b = new B();
C c = new C();
Foo.f1(a, b); // no error
Foo.f1(a, c); // compile error, it's ok
Foo.f2(a, b); // no error
Foo.f2(a, c); // no error ! why?
}
}
Последний f2
вызов метода не имеет ошибки компиляции, но я думаю C
, что это не подкласс A
, должна возникнуть ошибка компиляции. Любая помощь?
Комментарии:
1. Как вы думаете
T
, почему?A
Ответ №1:
Поскольку параметры типа в вашем коде, в котором вы вызываете метод, являются неявными, и, например, если компилятор Java выводит T
и R
Object
, это нормально, не так ли? Но если вы объявляете их явными, это вызывает ошибку:
Foo.<A, C>f2(a, c); //error as you wished
Foo.<Object, Object>f2(a, c); //no errors and it's ok, isn't it?