I have the following methods:
public <T> T fromJson( Reader jsonData, Class<T> clazz ) {
return fromJson( jsonData, (Type)clazz );
}
public <T> T fromJson( Reader jsonData, Type clazz ) {
...
}
The compiler is saying about the first method:
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 );
^
What is the problem?
The problem is the definition of the second method:
public <T> T fromJson( Reader jsonData, Type clazz ) {
There is no way for the compiler to tell what type T
might have. You must return Object
here because you can't use Type<T> clazz
(Type
doesn't support generics).
This leads to a cast (T)
in the first method which will cause a warning. To get rid of that warning, you have two options:
Tell the compiler the type. Use this (odd) syntax:
this.<T>fromJson( jsonData, (Type)clazz );
Note that you need the this
here because <T>fromJson()
alone is illegal syntax.
Use the annotation @SuppressWarnings("unchecked")
.
I encountered the same problem and found it was a bug (#6302954) in the JDK. It was fixed in jdk 6u25.
I worked around one of the instances of this problem but decided to update the JDK version on the CI box instead.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With