当前位置:  开发笔记 > 编程语言 > 正文

你能在Java中获得变量的先前值吗?

如何解决《你能在Java中获得变量的先前值吗?》经验,为你挑选了3个好方法。

说方式有一个变量(比如说String Str),Str的值开始为""然后当一些代码运行它被设置为"test"然后在代码中的其他地方再次更改为"tester".现在在程序中我想知道Str的先前值是什么.这在Java中可行吗?

所以我说变量变了两次,你想在第二次改变之前找出Str是什么.因此在上面的示例中,Str的最新值将是"tester",但我想在此之前找出Str是什么(假设您在将其更改为测试人员之前不知道它是什么)在这种情况下我想要成为能够发现Str是"测试".

是否可以在Java中执行此操作?



1> Stefan Thybe..:

不,这是不可能的,您必须在更改之前保存以前的值以执行您要求的操作.



2> Bill the Liz..:

不是语言的本地部分,没有.但是,当String更改时,您可以编写一个保存当前(上一个?)值的setter.

private String str;
private String prev;

setStr(String s)
{
    prev = str;
    str = s;
}

然后只需写一个单独的getter prev.

当然,这个解决方案依赖于你总是使用setter来改变它的值str.

此外,正如驱虫所指出的,如果您的程序不需要此信息,那么您不应修改程序以保存它.如果您需要用于调试的信息,可以在IDE的调试器中设置监视.



3> toolkit..:

简单回答,没有.

但是,您可以使用:

AOP

AOP框架(例如AspectJ)可以拦截对变量的赋值.

请参阅AspectJ切入点参考

JavaBeans属性更改支持

您可以使用标准JavaBean setter,getters来封装您的字段.然后,您可以在bean上注册侦听器以侦听属性更改,甚至否决该更改.

有关更多信息,请参阅JavaBean规范.

示例监听器:

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;

public class MyBeanListener implements PropertyChangeListener,
        VetoableChangeListener {

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        System.out.printf("Notifed of property changed event: %s => %s%n", evt
                .getOldValue(), evt.getNewValue());

    }

    @Override
    public void vetoableChange(PropertyChangeEvent evt)
            throws PropertyVetoException {
        System.out.printf("Notified of vetoable change event: %s => %s%n", evt
                .getOldValue(), evt.getNewValue());
    }
}

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有