与这个问题类似,我需要访问一个 POJO 实例的所有私有字段。不同之处在于我事先不知道我想要的字段的具体名称。
例如,如果我的 POJO 是:
public class Widget {
private java.lang.String fizz;
private java.lang.Boolean buzz;
private com.me.myapp.Foo foo;
}
我正在寻找某种方法来检查Widget
实例(或类本身)并查看它具有这 3 个字段/类型,而无需提前知道它们的名称/类型。
这可能吗?如果是这样,怎么做?如果不是,为什么?
更新:
System.out.println("classToInspect = " + classToInspect.getName() + ", and fields are:\n");
for(Field f : allFields)
System.out.println(f.getType());
印刷:
classToInspect = com.myorg.myapp.LoggerConfig, and fields are:
int
int
int
class java.lang.reflect.Constructor
class java.lang.Class
class java.lang.String
class java.security.ProtectionDomain
boolean
class java.lang.ref.SoftReference
class java.lang.ref.SoftReference
class java.lang.ref.SoftReference
class java.lang.ref.SoftReference
class java.lang.ref.SoftReference
class java.lang.ref.SoftReference
class java.lang.ref.SoftReference
class java.lang.ref.SoftReference
int
int
class sun.reflect.generics.repository.ClassRepository
long
class [Ljava.io.ObjectStreamField;
class sun.reflect.ReflectionFactory
boolean
class [Ljava.lang.Object;
interface java.util.Map
class [Ljava.lang.annotation.Annotation;
interface java.util.Map
interface java.util.Map
class sun.reflect.annotation.AnnotationType
请注意:这些字段都不是我实际LoggerConfig
班级的字段/属性/成员;它们必须通过反射或Object
超类的一部分提供/添加......