0

在任何事件方法(即在事件上调用的方法)中,除了制作一个保留旧信息的类静态变量之外,我将如何以任何其他方式保留上一次调用的信息?

例子:

Class X {
   static boolean ex = false;
   static int calledTimes;
   void OnClickEvent() {
    if(calledTimes<=5)
     {
    calledTimes++; 
     ex = true;
     }
    else
    ex = false;
    }
}

除了这个静态标志之外,还有什么方法可以保留信息吗?就我而言,我为每次调用保留了很多信息,并且我不想要太多的类变量。

有任何想法吗 ?

更多信息:我在遍历文本文件中的每一行时调用了一个方法。 我需要一个不仅适用于 gui 事件的通用解决方案

4

3 回答 3

3

如果您有一个 (Event)Listener 类实例,它侦听某些调用(例如onClickEvent()),那么即使实例属性就足够了,您不需要静态属性。

实例属性也被保留,因为侦听器调用是针对同一个对象实例进行的。

Class X {
private boolean ex = false;
private int calledTimes;

public void onClickEvent() {
    if(calledTimes<=5) {   
        calledTimes++; 
        ex = true;
    }
}
}
于 2013-03-03T18:36:04.807 回答
3

使用实例变量而不是类变量并使用实例来操作它们怎么样?这样实例可以以实例变量的形式保持状态。

如果你想保持这个类定义干净,你可以维护另一个对象作为实例变量来保留状态并使用访问器访问各个变量。

看一下这个示例实现:

public class X {

    private State state;

    // constructor to instantiate state

    void OnClickEvent() {
        if (state.getCalledTimes() <= 5) {
            state.incrementCalledTimes();
            state.setEx(true);
        } else
            state.setEx(false);
    }

}

State以及维护对象信息的类:

public class State {

    private boolean ex;
    private int calledTimes;

    public void setEx(boolean ex) {
        this.ex = ex;
    }

    public int getCalledTimes() {
        return calledTimes;
    }

    public void incrementCalledTimes() {
        calledTimes++;
    }

}
于 2013-03-03T18:37:07.227 回答
0

通过将事件侦听器分离到不同的类中,您可以指定该类中的字段。例如,使用 MouseListener 接口:

public class Listener implements MouseListener {

// Created a class that implements the MouseListener Interface.
// Because this is my own class I can specify some instance variables.

private boolean hasBeenClicked;

public Listener()
{
    this.hasBeenClicked = false;
}

@Override
public void mouseClicked(MouseEvent arg0) {
    if(hasBeenClicked)
    {
        System.out.println("I've already been clicked!");
                    // A Click has already occurred.
    }
    else
    {
        hasBeenClicked = true;
                    // A click has not occurred, so setting the value to true.
    }

}
于 2013-03-03T18:37:11.973 回答