Este es mi código: El ExecutorImp extiende AbstractExecutor que extrae las mismas lógicas de ejecución de sus ejecutores (ExecutorImp es un caso), al llamar al método execute() de ExecutorImp, llamará al método en su supertipo, pero el supertipo (el AbstractExcutor) debe conocer otra clase de unión al implementador (en el ejemplo, es la clase de usuario):¿Cómo obtener el tipo genérico en tiempo de ejecución?
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
abstract class AbstractExecutor<E> {
public void execute() throws Exception {
ArrayList<E> list = new ArrayList<E>();
// here I want to get the real type of 'E'
Class cl = this.getClass().getTypeParameters()[0].getGenericDeclaration().getClass();
Object o = cl.getConstructor(String.class).newInstance("Gate");
list.add((E) o);
System.out.println(format(list));
}
public abstract String format(ArrayList<E> list);
public abstract String getType();
}
public class ExectorImp<E> extends AbstractExecutor<User> {
@Override
public String getType() {
return "user";
}
@Override
public String format(ArrayList<User> list) {
StringBuffer sb = new StringBuffer();
for (User u : list) {
sb.append(u.toString() + " ");
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
new ExectorImp().execute();
}
}
class User {
String name;
public User(String name) {
this.name = name;
}
}
así, cuál es el problema con mis códigos?
Quizás esta respuesta puede ayudar con su problema. http: // stackoverflow.com/questions/6624113/get-type-name-for-generic-parameter-of-generic-class/19454610 # 19454610 –