当前位置: 首页 > 知识库问答 >
问题:

使用 Reflection API java 获取私有字段值

西门嘉澍
2023-03-14
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.UnknownHostException;
import java.util.ArrayList;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;

public class MongoTest {

    /**
     * @param args
     * @throws UnknownHostException 
     * @throws ClassNotFoundException 
     * @throws IllegalAccessException 
     * @throws IllegalArgumentException 
     */
    public static void main(String[] args) throws UnknownHostException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException {
        Employee employee= new Employee();
        employee.setFirstname("Durga Dutt");
        employee.setLastname("Pandey");
        employee.setAge(28);
        employee.setSalary(100035);

        Class<?> cl= Class.forName("Employee");
        Field[] fields= cl.getDeclaredFields();

        for(int i=0;i<fields.length;i++)
        {
            System.out.println(fields[i].get(employee));
        }

    }

}

上面的程序返回公共字段的值,但不在私有成员上工作。我已经在我的POJO课上宣布了getters和setters。

有什么想法吗?

共有1个答案

唐烨煜
2023-03-14

要获取私有字段的值,您应该使用setAccesable将其设置为可访问。

getDeclaredFields将允许您查看私有字段的名称,而不是值。

 类似资料:
  • 问题内容: 我想知道是否有一种方法可以获取java中某个类的所有私有字段及其类型。 例如,假设我有一堂课 现在,我想获得的所有私有字段(,,类)(如果不知道所有领域前期的名称),并检查它们的类型。 问题答案: 有可能获得与方法的所有字段的。然后,您必须检查每个字段的修饰符以查找私有字段: 请注意,这不会返回继承的字段。 最终,您可以使用Field.getType()方法获得字段的类型。

  • 现在,我想获取类的所有私有字段(、、)(事先不知道所有字段的名称)并检查它们的类型。

  • 如果调用,将得到一个空列表。 我尝试在Java中,在Kotlin中使用kotlin-reflect库,但没有成功。 我还尝试了https://github.com/ronmamo/reflections库进行反射,我得到了同样的结果。 你知道如何访问那个私有字段或者如何使用反射扩展一个隐藏的抽象类吗?

  • 问题内容: 我正在做大学项目。 我需要从课堂上获取所有字段。甚至是私有的并继承的。我试图获取所有声明的字段,然后转换为超类并重复。我的代码片段: 但这行不通。强制转换后仍然是同一类(不是超类)。 我将感谢您提供任何有关如何解决铸造问题或如何以其他方式检索这些字段的帮助。 问题不是要访问字段,而是要获取字段名称! 我以这种方式进行管理: 问题答案: obj = obj.getClass().getS

  • 问题内容: 我在AndroidStudio 1.2.1.1和Gradle 1.2.3中使用了ProGuard。 My Gradle的发布版本的配置如下: 我希望混淆类的私有字段。 到目前为止,这是我的proguard配置文件(经过多次尝试): 但是在从AndroidGuard 反编译后,我最终得到了: 我知道这种混淆的使用是有限的,但是我想由ProGuard重命名。怎么做? 这是refcard。

  • 我正在做大学项目<我需要从类中获取所有字段。甚至是私人的和继承的。我尝试获取所有声明的字段,然后转换到超类并重复。我的代码片段: 但是它不起作用。强制转换后仍然是同一个类(不是超类)。 我将感谢任何帮助如何修复强制转换问题,或者如何以不同的方式检索这些字段。 问题不是获取对字段的访问权限,而是获取字段的名称! 我这样管理它: