如何解决如何检测变量是否已更改?
| 我发现自己仅在变量已更改的情况下才想在程序中执行某些操作。到目前为止,我一直在做这样的事情:int x = 1;
int initialx = x;
...//code that may or may not change the value of x
if (x!=initialx){
doOneTimeTaskIfVariableHasChanged();
initialx = x; //reset initialx for future change tests
}
有没有更好/更简单的方法可以做到这一点?
解决方法
由于您只想在值更改时查找并执行某些操作,因此我将使用setXXX,例如:
public class X
{
private int x = 1;
//some other code here
public void setX(int proposedValueForX)
{
if(proposedValueForX != x)
{
doOneTimeTaskIfVariableHasChanged();
x = proposedValueForX;
}
}
}
, 您可以将getter / setter与每个字段相关联的脏位使用。如果通过setter更改了值,则将其标记为脏,并强制用户使用setter
, 另一种方法是使用AOP拦截字段的更改,例如AspectJ,您可以查看http://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html
, 例:
创建一个具有相同名称和数字的变量。
int var1;
int var2;
if(var1 != var2)
{
//do the code here
var2 = var1;
}
希望对您有所帮助。
, 您还可以使用标志概念,就像更改x的值一样。为布尔变量指定true。保持布尔值,默认值为false。
通过这种方式检查。
这种方法比基于性能的getter和setter更好,而不要具有两个方法getter和setter的冗余代码。
, 假设您有多个线程,则可以创建一个对象监视器,然后等待更改的对象唤醒所有阻塞的线程。
像这样:
private MyObject myObject;
... other thread ...
while(true) {
myObject.wait()
logic you want to run when notified.
}
... other thread ...
... later on ...
myObject.change();
myObject.notifyAll();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。