statememento

Getters in abstract State pattern not accessible in Memento pattern


I have a problem with saving some variables from State abstract method into the File in Memento Pattern. The error is 'Non accessible in scope'.

Here are the pieces of code:

State class.

public abstract class State 
{
    protected int W;


    public int getW() 
    {
        return W;
    }

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

Memento 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);
        }
}

I know it shouldn't work, but how to solve it?


Solution

  • You have at least three problems.

    First, you need to construct an instance of the State class someplace in your Momento class, maybe as a member in the constructor? I don't know what you are trying to accomplish.

    Second, State is abstract so you are going to have to define a subclass that you can instantiate. something like this:

    class MyState extends State...
    

    And instantiate MyState.

    Thirdly, State doesn't declare a getH() method. How do you expect to call that?

    Oh, one more thing:

    state.State.this
    

    Your use of "this" doesn't seem right.