views:

79

answers:

1

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?

+4  A: 

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, use the annotation @SuppressWarnings("unchecked").

Aaron Digulla
makes sense, thanks
Epaga