Java Object uniq值

时间:2015-11-18 16:16:42

标签: java class object abstract

我有这个抽象类:

public abstract class Pile {

    protected Deck d=new Deck(); 

    public Pile(){

    }
    public abstract void PrintCard();
    public abstract boolean IsEmpty();
}

我希望d字段及其值对于Pile(及其子类)类型的所有对象都是相同的。

我希望这种情况发生,因为我删除卡片并将它们添加到卡座中,因此它必须只有一个卡座。

1 个答案:

答案 0 :(得分:2)

最简单的方法就是制作d static(它也值得制作final,这样任何子类都不能用不同的实例替换它):

public abstract class Pile {
  protected static final Deck d=new Deck(); 

  public abstract void PrintCard();
  public abstract boolean IsEmpty();
}

但是,像这样的静态变量可能会有问题,尤其是从测试的角度来看。如果您需要一些Pile来拥有一个Deck而其他人有不同的Deck(例如JonK的例子),那么以后更改也很棘手。

您也可以将Deck作为参数注入:

public abstract class Pile {
  protected final Deck d;

  public Pile(Deck d) {
    this.d = d;
  }

  public abstract void PrintCard();
  public abstract boolean IsEmpty();
}

现在,您可以在构建Pile时注入您选择的值(例如模拟)。第二种解决方案是我选择的解决方案。