To meio enrolado com um problema. Tenho uma classe DTOBase, da qual derivo varios outras. Preciso de um metodo que crie
uma DTO qualquer a partir da classe, que obtenho por reflexao. So´consegui usando cast e supressWarning, mas nao me agradou.
Tenho um metodo que retorna a classe de um determinado DTO
@SuppressWarnings("unchecked")
public static <T extends DTOBase> Class<T> getDTOClass(String typeName)
{
Class<T> dtoClass = null;
try
{ String className = getClassName(typeName);
dtoClass = (Class<T>) Class.forName(className).asSubclass(DTOBase.class);
}
catch (Exception e) {
e.printStackTrace();
}
finally {
return dtoClass;
}
}
Entao tenho um metodo que cria uma DTO
@SuppressWarnings("unchecked")
public static <T extends DTOBase > T factory (String typeName)
throws InstantiationException, IllegalAccessException, InvocationTargetException, SQLException
{
return (T) getDTOClass(typeName).newInstance();
}
Funciona, mas tenho que fazer o cast (T) e usar SuppressWarnings(“unchecked”)
Quando nao uso, vem essa msg de erro em factory :
required: T
found: CAP#1
where T is a type-variable:
T extends DTOBase declared in method factory(String)
where CAP#1 is a fresh type-variable:
CAP#1 extends DTOBase from capture of ? extends DTOBase
Já notei que tem a ver com o retorno de asSubclass que e´ Class< ? extends DTOBase> e nao Class
Queria uma maneira melhor de fazer funcionar, sem usar cast e supressWarning. Alguma ideia ?
