将arraylist中的对象添加到类的实例中

时间:2013-12-11 01:10:11

标签: java arraylist instance

我有一个名为Garden的课程,其中包含一个花的arraylist。我有一个方法,它返回类中的类的实例和一个向类添加花的方法。如何在我的测试工具中为类的实例添加鲜花。我的代码:

public class Garden {

    ArrayList<Flower> flowerbed = new ArrayList<Flower>();
    Hive hive = null;

    private static Garden instance;

    public static Garden getInstance(){
        if(instance == null){
            instance = new Garden();
        }
        return instance;
    }

    public void addFlower(Flower flower){
        flowerbed.add(flower);
    }//some methods omitted
}

如果我这样做:

Flower f;
Garden g = new Garden();
g.addFlower(f);

一个新的花被添加到花园但不添加到花园的实例中,因为getInstance方法是静态的,所以在我的testharness中如何使用它会使我感到困惑。

2 个答案:

答案 0 :(得分:2)

Garden.getInstance().addFlower(new Flower());
Garden.getInstance().addFlower(new Flower());

您正在使用单例模式,因此您应该将Garden的构造函数设为私有

private Garden() {}

此外,由于没有理由继承单身人士

public final class Garden

调用花园getInstance将始终返回Garden的同一个实例,无论是谁调用它。

此外,您还要确保flowerBed不是静态的,就像您一样。

private Arraylist<Flower> flowerBed = new ArrayList<>();

答案 1 :(得分:1)

我可能误解了你的问题,因为答案似乎太微不足道了,但是为了给课程添加花,你应该只使用你已经提供的addFlower方法。

 public void testMethod() {

     Flower one = new Flower();
     Flower two = new Flower();

     Garden garden = Garden.getInstance();
     garden.addFlower(one);
     garden.addFlower(two);
 }
编辑:正如Robbmjs回答的那样,为了正确应用单例模式,你的Garden构造函数应该是私有的。