迭代类中不同类型的属性并打印每个类型

时间:2016-08-06 21:45:48

标签: java

我有这个简单的课程:

public class Events{
    Boolean wentToGym; 
    String eventsToday; 

    public Events(Boolean wentToGym, String eventsToday){
        this.wentToGym = wentToGym; 
        this.eventsToday = eventsToday; 
    } 

现在由于某种原因,我需要遍历这些字段并打印它们。因为它们来自不同的类型,我想我会在for循环中使用Object声明:

public static void main(String[] args){
    Events events = new Events(true, "first trial"); 
    for(Object e: events.getClass().getDeclaredFields){
        System.out.println(e.toString); 
    }
} 

不幸的是没有工作,因为该对象没有toString方法。它给了我与尝试打印数组时相同的结果。而且我不知道如何将它们转换为循环内部,因为它们被声明为对象。什么是迭代类的属性并打印它们的最佳方法?

编辑:有些人急于提到重复的问题是关于所有相同类型(字符串)的属性,所以不需要使用对象,问题也是一样的。通过简单地标记问题,即使通过简单而不是感觉重要,通过阅读整个事物来尝试帮助总是一个好主意。

1 个答案:

答案 0 :(得分:0)

这是你要找的吗?

import java.util.Arrays;

public class Events {

    Boolean wentToGym;

    String eventsToday;

    public Events(Boolean wentToGym, String eventsToday) {
        this.wentToGym = wentToGym;
        this.eventsToday = eventsToday;
    }

    public static void main(String[] args) {
        Events events = new Events(true, "first trial");
        Arrays.stream(events.getClass().getDeclaredFields()).forEach(field -> {
            try {
                System.out.println(field.getName() + ": " + field.get(events));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        });
    }
}

输出:

wentToGym: true
eventsToday: first trial