首页 > 解决方案 > 是否可以在没有循环的情况下更新 Java 中的所有对象?

问题描述

我有一个员工班,我希望所有员工的年龄都用一种方法增加一个而不循环。那可能吗?

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
    }
}

标签: javaclassoop

解决方案


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

为什么不推荐这种方法?

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

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

推荐阅读