【问题标题】:Is it possible to update all objects in Java without loop?是否可以在没有循环的情况下更新 Java 中的所有对象?
【发布时间】:2020-12-30 17:12:44
【问题描述】:

我有一个员工班级,我希望所有员工的年龄都通过一种方法增加一而无需循环。这可能吗?

class Employee{
    Employee(int age)
    {
        this.age = age;
    }
    String name;
    int age;
    static void NextYear()
    {
        //age++;
        // will increase all ages by 1 
    }
    
    void increaseAge() // I don't want this method
    {
        age++;
    }
    
}
public class Main
{
    public static void main(String[] args) {
        Employee e1 = new Employee(23);
        Employee e2 = new Employee(34);
        
        Employee.NextYear(); // want increase all ages by one 
        
        System.out.println("e1 age " + e1.age); // need 24
        System.out.println("e2 age " + e2.age); // need 35
    }
}

【问题讨论】:

  • 不,这是不可能的。某处的某些代码需要循环来实现这一点。
  • 有没有一种看起来不像循环的方法?
  • 更好地存储出生年份/日期(永远不会改变)并在 getAge() 中动态计算年龄
  • 为什么禁止循环?对于尚未教授循环的课程来说,这是一道作业题吗?

标签: java class oop


【解决方案1】:

可以使用静态字段,但我不建议这样做。

为什么不推荐这种方法?

静态变量更难测试,需要额外注意并与多线程环境进行额外同步。在这样一个简单的场景中,您会引入不必要的复杂性。

private static class Employee {

    private static int offset;

    private final String name;
    private final int age;

    private Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age + offset;
    }

    public static void nextYear() {
        offset++;
    }
}

Employee e1 = new Employee("e1", 23);
Employee e2 = new Employee("e2", 34);

Employee.nextYear();

System.out.println("e1 age " + e1.getAge()); // 24
System.out.println("e2 age " + e2.getAge()); // 35

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多