Comment obtenir le type générique au moment de l'exécution?

C'est mon code:
Le ExecutorImp s'étend AbstractExecutor qui extrait de la même exécuter des logiques de ses exécutants(ExecutorImp est un cas),lors de l'appel de la méthode execute() de ExecutorImp, il va appeler la méthode dans son supertype,mais le supertype (le AbstractExcutor) devrait connaître une autre classe de liaison à l'opérateur(dans l'exemple, c'est l'Utilisateur de la classe):

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;
    }
}

ALORS, quel est le problème avec mes codes?

Peut-être que cette réponse peut vous aider avec votre problème. stackoverflow.com/questions/6624113/...

OriginalL'auteur hguser | 2010-10-15