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

获取类实例变量并使用反射打印它们的值

公良骁
2023-03-14

我有一个带有getter和setter的2个POJO类,现在我正在尝试获取该类的所有类实例变量。

我知道我们可以利用反思来做这件事?

这是我的POJO课程,它将扩展我的反思课程。

class Details{

private int age;
private String name;

}

反射类如下:

class Reflection{

public String toString(){

return all the fields of that class
}

共有3个答案

越骏俊
2023-03-14

在上面的代码中再添加一行。如果要访问类的私有属性,请使用以下行

field.setAccessible(true);

邓才
2023-03-14
    ClassLoader classLoader = Main.class.getClassLoader();
    try {
        Class cls = classLoader.loadClass("com.example.Example");
        Object clsObject = cls.newInstance();

        Field[] fields = cls.getFields();
        for (Field field : fields) {
            String name = field.getName();
            Object value = field.get(clsObject);

            System.out.println("Name : "+name+" Value : "+value);

        }
        System.out.println(cls.getName());


    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
高嘉树
2023-03-14

你可以这样做:

public void printFields(Object obj) throws Exception {
    Class<?> objClass = obj.getClass();

    Field[] fields = objClass.getFields();
    for(Field field : fields) {
        String name = field.getName();
        Object value = field.get(obj);

        System.out.println(name + ": " + value.toString());
    }
}

这将仅打印公共字段,以递归方式打印私有字段使用class.getDeclaredFields。

或者,如果要扩展类:

public String toString() {
    try {
        StringBuffer sb = new StringBuffer();
        Class<?> objClass = this.getClass();

        Field[] fields = objClass.getFields();
        for(Field field : fields) {
            String name = field.getName();
            Object value = field.get(this);

            sb.append(name + ": " + value.toString() + "\n");
        }

        return sb.toString();
    } catch(Exception e) {
        e.printStackTrace();
        return null;
    }
}
 类似资料:
  • 问题内容: 我有一个带有getter和setter的2 POJO类,现在我正试图获取该类的所有类实例变量。 我知道我们可以使用反射该怎么做? 这是我的POJO类,它将扩展我的反射类。 反射类是这样的: 问题答案: 您可以执行以下操作: 这只会打印公共字段,要打印私有字段,请递归使用class.getDeclaredFields。 或者,如果您要扩展该类:

  • 本文向大家介绍利用反射获取Java类中的静态变量名及变量值的简单实例,包括了利用反射获取Java类中的静态变量名及变量值的简单实例的使用技巧和注意事项,需要的朋友参考一下 JAVA可以通过反射获取成员变量和静态变量的名称,局部变量就不太可能拿到了。 其中要查看的Java类是: 以上这篇利用反射获取Java类中的静态变量名及变量值的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望

  • 问题内容: 说我有一个具有一些成员变量的类,一个或多个是具有成员变量的另一个类。如何获得两个类中每个变量的值? 我可以通过以下方式获取变量:通过调用Foo对象的值,然后再次对其进行迭代以获取子类变量。 但是,如何在没有该类实例的情况下获取每个子类成员变量的值?我的平凡示例之所以有用,是因为该类的每个实例的变量都相同,因此我可以调用 我想如果能以某种方式从字段中获取对象的实例,那可能会起作用? 提前

  • 现在,有没有可能通过反思来实现这一点呢?

  • 问题内容: 我想在变量中提取当前路径,并稍后在脚本中使用它 就像是: 稍后的: 但是多年来,我的bash技能已经生锈了。 我将如何进行呢? 问题答案: (如果路径包含空格,则必须使用引号。)

  • 使用Java反射,是否可以获取局部变量的名称?例如,如果我有: 有没有可能实现一种方法,可以找到这些变量的名称,比如: 编辑:这个问题与Java中有没有找到传递给函数的变量名称的方法不同?在这一点上,它更纯粹地询问一个人是否可以使用反射来确定局部变量的名称,而另一个问题(包括公认的答案)更侧重于测试变量的值。