【问题标题】:Iterating through attributes of DIFFERENT types in a class and printing each [duplicate]遍历类中不同类型的属性并打印每个[重复]
【发布时间】:2016-08-06 21:45:48
【问题描述】:

我有这个简单的课程:

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 方法,因此无法正常工作。当您尝试打印数组时,它给了我相同的结果。而且我不知道如何将它们放入循环中,因为它们被声明为对象。遍历类的属性并打印它们的最佳方法是什么?

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

【问题讨论】:

  • 谢谢,但在您提供的情况下,所有属性都是字符串。所以迭代没有问题,也不需要使用Object。
  • “没有toString() 方法”是什么意思?所有变量,除了基本类型,都通过继承具有toString()
  • 一旦在循环中将它们声明为Object,就只能使用Object接口中的方法。它们不再被视为布尔值或字符串
  • toString()Object上的一个方法,至少按照docs是这样的
  • 我在 Eclipse 上得到的结果与尝试打印数组时得到的结果相同。有时间可以自己试试。

标签: java


【解决方案1】:

这就是你要找的吗?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 2012-10-29
    相关资源
    最近更新 更多