Dies ist mein Code: Die ExecutorImp erweitert AbstractExecutor, die die gleichen ausführen Logiken seiner Implementierer (ExecutorImp ist ein Fall), beim Aufruf der Execute() -Methode von ExecutorImp, wird es die Methode in seinem Supertyp, aber der Supertyp aufrufen (der AbstractExcutor) sollte wissen, eine andere Klasse an den Implementierer Bindung (im Beispiel ist es die Benutzerklasse):Wie bekomme ich den generischen Typ zur Laufzeit?
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;
}
}
SO, was ist das Problem mit meinem Code?
Vielleicht kann diese Antwort bei Ihrem Problem helfen. http: // Stapelüberlauf.com/questions/6624113/get-type-name-for-generic-parameter-of-generic-class/19454610 # 19454610 –