Đây là mã của tôi: ExecutorImp mở rộng AbstractExecutor trích xuất cùng một logic thực thi của các trình thực thi của nó (ExecutorImp là một trường hợp), khi gọi phương thức execute() của ExecutorImp, nó sẽ gọi phương thức trong siêu kiểu của nó, nhưng siêu kiểu (AbstractExcutor) nên biết một lớp khác ràng buộc với người triển khai (trong ví dụ, đó là lớp Người dùng):Làm thế nào để có được kiểu generic trong thời gian chạy?
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, vấn đề với mã của tôi là gì?
Có thể câu trả lời này có thể giúp giải quyết vấn đề của bạn. http: // stackoverflow.com/questions/6624113/get-type-name-for-generic-parameter-of-generic-class/19454610 # 19454610 –