java - 是否可以在没有循环的情况下更新 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
}
}
解决方案
可以使用静态字段,但我不建议这样做。
为什么不推荐这种方法?
静态变量更难测试,需要额外注意并与多线程环境进行额外同步。在这样一个简单的场景中,您会引入不必要的复杂性。
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
推荐阅读
- sql - 检查字符串是否包含 SQLite 中的任何整数
- sql - 根据while循环的当前迭代获取值
- macos - 如何在 macOS 上设置 GridDB
- jquery - .getJSON 的帮助只能部分工作
- react-native - 反应原生异步等待白屏
- c# - 使用渲染器(世界空间)在游戏对象周围绘制边界矩形(屏幕空间)(Unity)
- php - 我想将活动的获胜日设置为工作日,但是否可以解决错误?
- mysql - 使用带有临时变量的 MySQL CASE 语句,CASE 结果不正确?
- javascript - 如何获取 youtube iframe 的当前时间但不是十进制?
- azure - Azure SQL 托管实例 - SSMS 连接