【问题标题】:Object inside of same object同一对象内的对象
【发布时间】:2017-04-03 19:13:43
【问题描述】:

我想将对象存储在对象中,想法是保存它的每个先前条件,以便我可以实现撤消选项。我知道这个问题可以通过列表来解决,但我对这个特殊的解决方案很感兴趣。

我有课:

public class Condition {

  private String name;
  private Condition last_condition;

  public Condition(String name){
    this.name = name;
  }

  public void changeName(String name){

    if(last_condition == null){
      last_condition = new Condition(this.name);
      this.name = name;
      return;
    }

    while(last_condition != null){
    last_condition = last_condition.last_condition;
  }

  last_condition = new Condition(this.name);
  his.name = name;
  }
}

我认为问题出在这部分:

last_condition = last_condition.last_condition;

但我不完全明白为什么。我认为这取决于将空指针保存在变量中。由于有人来自 C,这看起来很自然。这只是类的简单表示,我也尝试了一些临时变量,但结果是一样的。

编辑: 例如,当我调用此方法 4 次时,它并没有保存所有 4 个更改。所以没有编译错误,只是不能正常工作。

欢迎任何帮助!

【问题讨论】:

  • 究竟是什么错误?
  • 这是一个 UI 程序吗?还是为了什么?也许您可以使用 API,例如:docs.oracle.com/javase/7/docs/api/javax/swing/undo/…
  • 你遇到了什么错误?
  • 对不起,这不是错误,但是当我调用此方法例如 4 次时,它并没有保存所有 4 个更改。
  • 你是如何使用你的方法的?

标签: java object


【解决方案1】:

你做的比必要的更难。您不需要遍历所有先前的条件。你只需要

public void changeName(String name){
    Condition copy = new Condition(this.name);
    copy.lastCondition = this.lastCondition;
    this.lastCondition = copy;
    this.name = name;
}

【讨论】:

  • 如果我不想拥有固定数量的先前状态,我需要迭代。
  • 不,你没有。如果调用 changeName 345 次,上面的代码会创建一个包含 345 个 Condition 实例的链表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多