来自类型 T 的字段

Fields from type T

我想从 T 类型的对象中获取所有字段及其值。假设我有:

public class Start {

    public void startMethod(){
        Main<GenericType> main = new Main<>();
        main.work(new GenericType());
    }

}

然后是 class Main,我想要 GenericType 的字段:

public class Main<T> {

    public void work(T t){
        // Is there a way to get t's fields and values?
    }

}

首先需要获取ClassT,然后通过反射获取所有字段

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

但是你必须实例化泛型类型,像这样,实例化 TString:

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

比我一开始想的要简单。谢谢大家

如果 T 在类型定义中被捕获,您只能解析它。例如:

class StringMain extends Main<String> {}

然后你可以用TypeTools:

之类的东西来解决
Type<?> t = TypeResolver.resolveRawArgument(Main.class, StringMain.class);
assert t == String.class

干杯