Дженерики Java: Какова проблема компилятора здесь? (“никакой уникальный максимальный экземпляр”)

У меня есть следующие методы:

public <T> T fromJson( Reader jsonData, Class<T> clazz ) {
    return fromJson( jsonData, (Type)clazz );
}

public <T> T fromJson( Reader jsonData, Type clazz ) {
    ...
}

В компиляторе говорится о первом методе:

 type parameters of <T>T cannot be determined;
 no unique maximal instance exists for type variable T
 with upper bounds T,java.lang.Object

 return fromJson( jsonData, (Type)clazz );
                ^

В чем проблема?

10
задан Epaga 12 March 2010 в 08:39
поделиться

1 ответ

Проблема заключается в определении второго метода:

public <T> T fromJson( Reader jsonData, Type clazz ) {

Компилятор никак не может определить, какой тип может иметь T. Вы должны вернуть Object здесь, потому что вы не можете использовать Type clazz (Type не поддерживает дженерики).

Это приводит к приведению (T) в первом методе, что вызовет предупреждение. Чтобы избавиться от этого предупреждения, у вас есть два варианта:

  1. Сообщите компилятору тип. Используйте такой (странный) синтаксис:

    this.fromJson( jsonData, (Type)clazz );
    

    Обратите внимание, что здесь нужен this, потому что fromJson() сам по себе является незаконным синтаксисом.

  2. Используйте аннотацию @SuppressWarnings("unchecked").

16
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: