У меня есть следующие методы:
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 );
^
В чем проблема?
Проблема заключается в определении второго метода:
public <T> T fromJson( Reader jsonData, Type clazz ) {
Компилятор никак не может определить, какой тип может иметь T
. Вы должны вернуть Object
здесь, потому что вы не можете использовать Type
(Type
не поддерживает дженерики).
Это приводит к приведению (T)
в первом методе, что вызовет предупреждение. Чтобы избавиться от этого предупреждения, у вас есть два варианта:
Сообщите компилятору тип. Используйте такой (странный) синтаксис:
this.fromJson( jsonData, (Type)clazz );
Обратите внимание, что здесь нужен this
, потому что
сам по себе является незаконным синтаксисом.
Используйте аннотацию @SuppressWarnings("unchecked")
.