反思:返回错误的字段
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' 的字段,而是得到的字段是:
- serialVersionUID
- 姓名
但是我的 class 是一个简单的 class,它具有三个属性并具有带有一些 getter 和 setter 的原始数据类型 only.However
String className= objClass.getSimpleName();
返回正确的 class 名称。
someMethod()
没有给我 class 的成员变量。
我怎样才能得到它们?
您应该将 objClass.getClass().getDeclaredFields()
替换为 objClass.getDeclaredFields()
objClass
是 MyClass
的 class 对象
objClass.getClass()
是 java.lang.Class
的 class 对象
您在代码class java.lang.Class
中获取声明的字段
我试图使用反射 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' 的字段,而是得到的字段是:
- serialVersionUID
- 姓名
但是我的 class 是一个简单的 class,它具有三个属性并具有带有一些 getter 和 setter 的原始数据类型 only.However
String className= objClass.getSimpleName();
返回正确的 class 名称。
someMethod()
没有给我 class 的成员变量。
我怎样才能得到它们?
您应该将 objClass.getClass().getDeclaredFields()
替换为 objClass.getDeclaredFields()
objClass
是 MyClass
objClass.getClass()
是 java.lang.Class
您在代码class java.lang.Class
中获取声明的字段