この質問と同様に、POJO の 1 つのインスタンスのすべてのプライベート フィールドにアクセスする必要があります。違いは、事前に必要なフィールドの特定の名前がわからないことです。
たとえば、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
リフレクションまたはスーパークラスの一部を介して提供/追加する必要があります...