Java中对象上的循环

Java中对象上的循环,java,Java,可以用几种不同的类型循环一个对象吗?例如(字符串、整型、布尔型) 我希望避免使用带有多个打印的方法display() public class Personage { public String name; public int age; public boolean sex = false; public Personage(String name, int age, boolean sex){

可以用几种不同的类型循环一个对象吗?例如(字符串、整型、布尔型)

我希望避免使用带有多个
打印的方法display()

   public class Personage {
    
      public String name; 
      public int age;
      public boolean sex = false; 
    
    
      public Personage(String name, int age, boolean sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
      }
    
      public void display(){
        System.out.println("Name : " + name);
        System.out.println("Age : " + age);
        System.out.println("Sex : " + sex);
      }
    
    }
在nodeJS中,存在一个名为foReach的循环以实现以下目的:

var perso1 = {
    name : "Toto",
    sex : true,
    age : 30
}

for(var information in perso1){
    console.log(information + " : " + perso1[information]);
}

你认为用Java做同样的事情是可能的吗?

根据你提出的问题和你给出的代码,循环不同的数据类型似乎不太正确

我已经给出了代码,通过该代码,您可以获得想要的输出,并且避免使用带有多个print语句的display方法

class Personage {

    public String name; 
    public int age;
    public boolean sex = false; 

    public Personage(String name, int age, boolean sex){
      System.out.println("Name : " + name);
      System.out.println("Age : " + age);
      System.out.println("Sex : " + sex);
    }

    //public void display(){
       //System.out.println("Name : " + name);
       //System.out.println("Age : " + age);
       //System.out.println("Sex : " + sex);
    //}

}
public class Personage2 {

    public static void main(String[] args) {
        Personage ob = new Personage("Mark", 23, true);
        Personage ob2 = new Personage("Ruffalo", 26, false);
        //you can declare as many as objects using the Personage constructor 
        // with different data each time as you want
    }

}
它只关心通过对象声明传递给构造函数的数据类型

Personage("Mark", 25, true);

您可以通过构造函数参数处理这些数据类型。

最简单的方法是将该方法添加到Person类中并使用。这将导致以下代码:

公众人物{
公共字符串名称;
公共信息;
公共布尔性别=假;
公众人物(字符串名称、整数年龄、布尔性别){
this.name=名称;
这个。年龄=年龄;
这个。性=性;
}
@凌驾
公共字符串toString(){
StringBuilder=新的StringBuilder();
对于(字段f:getClass().getDeclaredFields()){
试一试{
builder.append(f.getName()).append(“:”).append(f.get(this)).append(“\n”);
}捕获(IllegalArgumentException | IllegalAccessException e){
e、 printStackTrace();//应该被处理
}
}
返回builder.toString();
}
}
之后,可以使用以下代码输出对象:

System.out.println(新人物(“test”,18,true));
我也可以向您推荐。它还包含一个可以用来解决问题的注释。例如,您的代码可能类似于以下代码段:

@allargsconstuctor
@托斯特林
公众人物{
公共字符串名称;
公共信息;
公共布尔性别=假;
}

如果您只想显示属性,而不管其格式如何,则可以使用lombok
@ToString
或Apache Common Lang
ReflectionStringBuildR
中的库,也可以通过IDE生成

但是,如果您想知道如何使用JavaScript实现这一点,有两种方法:

  • 如果所有字段都是公共字段:
  • 如果字段是私有的,并且您使用公共getter:

  • 您可以创建Utils类,使其可用于任何对象。

    这是否回答了您的问题?您甚至可以使用
    Java反射
    执行此类任务。您希望在何处应用for循环。在Personage类内部还是在其他类中?正如@U-Dev指出的,您可以使用
    toString
    方法。我想这就是你的意思,所以把它标记为一个副本。反思:这不是完成OP要求的正确方法。很明显,它是有效的,但是有一个更好的方法。你能给出这样一个更好的方法吗@在查看上面的注释时,我们使用
    .toString
    方法。
            YourPojo object = ...
            Field[] declaredFields = object.getClass().getDeclaredFields();
            for(Field field : declaredFields){
                String fieldName = field.getName();
                Object value = field.get(object);
                System.out.println(fieldName + " = " + value);
            }
    
            YourPojo object = ...
            Method[] declaredMethods = object.getClass().getDeclaredMethods();
            for(Method method : declaredMethods){
                if(method.getName().startsWith("get")){
                    String propertyName = method.getName().substring(3);
                    Object value = method.invoke(object);
                    System.out.println(propertyName + " = " + value);
                }
            }