我想从类型为t的对象中获取所有字段及其值,比如我有:
public class Start {
public void startMethod(){
Main<GenericType> main = new Main<>();
main.work(new GenericType());
}
}
然后是Main类,我想要GenericType的字段:
public class Main<T> {
public void work(T t){
// Is there a way to get t's fields and values?
}
}
首先需要得到T
中的Class
,然后通过反射得到所有字段
abstract class A<T> {
Class<T> clazz;
void doGetClass() {
Type genType = this.getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
this.clazz = (Class<T>) params[0];
}
}
但是你必须实例化泛型类型,像这样,实例化T
到String
:
class B extends A<String>{
}
然后B b = new B();
b.doGetClass();// b.clazz is String.class
在@BalwinderSingh的回答之后,我想到了这个:
public void work(T t){
for(Field f : t.getClass().getDeclaredFields()){
try {
f.setAccessible(true);
String name = f.getName();
Object value = f.get(object);
}catch(Exception e){
e.printStackTrace();
}
}
}
这比我一开始想的要简单。谢谢大家。