Страницы

Поиск по вопросам

четверг, 25 октября 2018 г.

Что значит: Inference variable T has incompatible bounds

Прошу прощения, если вопрос покажется глупым, но почему не компилируется этот код:
class Main { public static void main(String[] args) { System.out.println("Compiled successfully."); }
private static void foo(T genericVar) { // ... bar(genericVar.getClass(), genericVar); // ... }
private static void bar(Class theClass, E instance) { // Do something } }
class SomeType {}

При компиляции получается следующее:
Main.java:8: error: method bar in class Main cannot be applied to given types; bar(genericVar.getClass(), genericVar); ^ required: Class,E found: Class,T reason: inference variable E has incompatible bounds equality constraints: CAP#1 lower bounds: T where E,T are type-variables: E extends SomeType declared in method bar(Class,E) T extends SomeType declared in method foo(T) where CAP#1 is a fresh type-variable: CAP#1 extends SomeType from capture of ? extends SomeType 1 error
Вижу, что передаётся неверный второй параметр в функцию bar, но интересно узнать почему так? Ведь по логике типы совместимы, да и с первым параметром не возникает проблем.
Сейчас, чтобы избежать ошибки, изменил тип второго параметра в bar() на SomeType, и это меня устраивает, но хочется понять из-за чего не получается скомпилировать именно так.


Ответ

getClass() возвращает тип Class
class Main { public static void main(String[] args) { System.out.println("Compiled successfully."); }
private static void foo(T genericVar) { // ... bar(genericVar.getClass(), genericVar); // ... }
private static void bar(Class theClass, E instance) { // Do something } }
class SomeType {}

Комментариев нет:

Отправить комментарий