反思:返回错误的字段

Reflection : returning wrong fields

我试图使用反射 API 来获取 class 的字段,我是通过将 class 作为参数传递给以下方法来实现的

private void someMethod(Class<?> objClass) throws IOException {
        String className= objClass.getSimpleName();
        Map<String, String> fieldsAndDataType = new LinkedHashMap<>();
        for (Field field : objClass.getClass().getDeclaredFields())
        {
            String fieldName = field.getName();
            String fieldDataType = field.getType().toString();
            fieldsAndDataType.put(fieldName, fieldDataType);
        }
        Log.d("here","here "+fieldsAndDataType);

    }

我正在调用类似

的方法
someMethod(MyClass.class);

但我没有返回 'MyClass' 的字段,而是得到的字段是:

  1. serialVersionUID
  2. 姓名

但是我的 class 是一个简单的 class,它具有三个属性并具有带有一些 getter 和 setter 的原始数据类型 only.However

String className= objClass.getSimpleName();

返回正确的 class 名称。

someMethod() 没有给我 class 的成员变量。 我怎样才能得到它们?

您应该将 objClass.getClass().getDeclaredFields() 替换为 objClass.getDeclaredFields()

objClassMyClass

的 class 对象

objClass.getClass()java.lang.Class

的 class 对象

您在代码class java.lang.Class 中获取声明的字段