我想使用函数级变量进行簿记,因为我不想用大量的成员变量来污染我的代码:
class A
{
void funcA() {
// ...
static int oldValue = -1;
if (oldValue != newValue) {
loadNewData();
oldValue = newValue;
}
}
};
但我需要变量oldValue
非静态才能对此类的每个实例进行唯一检查。有没有办法在每个实例级别上使用这个书籍保持变量的惰性实例?
答案 0 :(得分:1)
没有办法在函数范围内使用非静态变量,并使用它来跟踪先前调用中分配的先前值。如您的示例所示,常规变量将被分配-1
,并将按顺序保存后面的分配值(如您所知)。
您的情况正是使用实例变量的情况,因为您需要与某个方法的内容相关联的私有可变状态。您甚至可以通过OO定义/方法来说明实例变量的情况。
在getter中为实例变量提供一个惰性初始化器也很容易,为每个使用它的方法封装了相同的初始化逻辑。
虽然可能有其他方法可以解决这个问题,但它们似乎并不是最干净的解决方案。
答案 1 :(得分:1)
我没有尝试,但可能以下工作。
使用静态数组/ List和其他变量来代替单个变量,该变量用于计算实例编号。