【问题标题】:Getters in abstract State pattern not accessible in Memento pattern在 Memento 模式中无法访问抽象状态模式中的吸气剂
【发布时间】:2016-04-14 05:10:01
【问题描述】:

我在将状态抽象方法中的一些变量保存到备忘录模式中的文件时遇到问题。错误是“范围内不可访问”。

以下是代码片段:

状态类。

public abstract class State 
{
    protected int W;


    public int getW() 
    {
        return W;
    }

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

纪念品类。

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

我知道它不应该起作用,但是如何解决呢?

【问题讨论】:

  • Save方法中的状态从何而来?
  • Memento 类在 State 类之外的另一个包中,所以我不得不将 State 类从包状态导入到 Memento 类中。

标签: state memento


【解决方案1】:

你至少有三个问题。

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

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

class MyState extends State...

并实例化 MyState。

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

哦,还有一件事:

state.State.this

您对“this”的使用似乎不对。

【讨论】:

  • 我想保存游戏中角色的坐标状态,以便加载这些变量(w和h)并加载游戏。 :) 作为getH(),我已经在geetingW 中遇到了这个问题,所以我还没有实现getH。作为第二个问题,我有一些从 State 类扩展的类。但它不是 Memento 类。
  • 如何不使用 state.State.this 来准确引用该状态?我不知道。 :(
猜你喜欢
  • 1970-01-01
  • 2018-10-13
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2020-09-21
  • 1970-01-01
相关资源
最近更新 更多