I have two classes and one interface
public class ExcelReader<T> extends Reader<T> implements RowColumnReader<T> {
// private final TypeToken<T> typeToken = new TypeToken<T>(getClass()) {};
// private final Type type = typeToken.getType();
/* public Type getType() {
return type;
}*/
// Useing Guava getting System.out.println(reader.getType()) T as ouput
@Override
public List<T> readFile(String file) {
//my code
}
}
public abstract class Reader<T> {
protected Class<T> clazz;
/*public Reader() {
clazz = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}*/
// Constructor is commented beacuse getting Exception java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
}
public interface RowColumnReader<T> extends HeaderFields<T>{
public List<T> readFile(String file);
}
public interface HeaderFields<T> {
default List<String> getHeader(Class<T> clazz) throws HeaderNotDefiendException {
//my code
return headerList;
}
}
I have tried all possible way to get class of generic type. I followed Get generic type of class at runtime and even tried all solution given in that page. But still not getting any luck.
Even with Gauva
https://stackoverflow.com/a/19775924/2290078 getting the output of getType()
is T not the actual generic class
My test code is
Reader<Test> reader = new ExcelReader<>();
//System.out.println(reader.getType()); ---> output is T
List<Test> list = reader.readFile("Sample.xlsx");
System.out.println(list);
Aucun commentaire:
Enregistrer un commentaire