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 LangReflectionStringBuildR
中的库,也可以通过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);
}
}