在 Memento 模式中无法访问抽象状态模式中的吸气剂

Getters in abstract State pattern not accessible in Memento pattern

我在将一些变量从 State 抽象方法保存到 Memento 模式中的文件时遇到问题。错误是 'Non accessible in scope'.

以下是代码片段:

状态class.

public abstract class State 
{
    protected int W;


    public int getW() 
    {
        return W;
    }

    public void setW(int w)
    {
        W = w;
    }
}

纪念品class.

public class Memento  {
    private int w, h;
    private double health;
    private FileWriterUtil fileWriter = new FileWriterUtil("data.txt");
    private FileWriterCaretaker caretaker = new FileWriterCaretaker();

        public void Save() {
        //here is the error in two lines under.
        w = state.State.this.getW();
        h = state.State.this.getH();

        String strI = Integer.toString(w);
        String strII = Integer.toString(h);
        String str = strI+strII;

        fileWriter.write(str);
        caretaker.save(fileWriter);
        }
}

我知道这不应该,但如何解决?

你至少有三个问题。

首先,您需要在您的 Momento class 中的某处构造一个 State class 实例,也许作为构造函数中的成员?我不知道你想完成什么。

其次,State 是抽象的,因此您必须定义一个可以实例化的子class。像这样:

class MyState extends State...

并实例化 MyState。

第三,State 没有声明 getH() 方法。你希望怎么称呼它?

哦,还有一件事:

state.State.this

您对 "this" 的使用似乎不正确。