如何在java中实现静态对象列表

时间:2014-09-26 03:04:43

标签: java list

只是想问下面我创建的类是否正确,或者是否由于使用静态对象列表而导致错误,并且我的封装实现正确,因为我需要限制对静态变量的访问。 / p>

public class Car {
    private String carName, carPlateNumber;
    private static List<Car> carList;

    public Car(String carName, String carPlateNumber) {
        super();
        this.carName = carName;
        this.carPlateNumber = carPlateNumber;
    }

    public String getCarName() {
        return carName;
    }

    public void setCarName(String carName) {
        this.carName = carName;
    }

    public String getCarPlateNumber() {
        return carPlateNumber;
    }

    public void setCarPlateNumber(String carPlateNumber) {
        this.carPlateNumber = carPlateNumber;
    }

    public static void createCarList() {
        carList = new ArrayList<Car>();
    }

    public static void addCarToList(Car car) {
        carList.add(car);
    }

    public static Car getCarAt(int location) {
        return carList.get(location);
    }

    public static void clearCarList() {
        carList.clear();
    }

    public static List<Car> getCarList() {
         return carList;
    }
}

然后像这样使用这个类

Car.createCarList();
Car.addCarToList(new Car("Mustang","CA-12343"));
. . .
. . .

依旧......

2 个答案:

答案 0 :(得分:3)

可以使用下面的示例来共享您的列表。

使用enum的优点是它提供了延迟初始化;在您需要之前不会创建实例。此外,当它初始化时,它以线程安全的方式完成。您可以使用类获得相同的结果,但是您需要以其他方式同步初始化以使列表线程安全。

还有其他方法可以传递列表,但是当列表是全局列表时,我认为这种单例模式是一种简单安全的方法。

main方法中创建列表会使在其他程序中重用列表变得更加困难。例如,如果您有多个列表,那么您需要在main方法中创建所有列表,然后在每次调用中将它们作为参数传递。如果您有其他类,请参阅Main类来访问列表,如其他地方所建议的那样,然后创建循环依赖项。应用程序不需要知道如何创建其库所需的列表,并且库不应该知道应用程序。

public enum Cars {
  theCars;

  /* Class can be defined in a different file or defined here. 
     For example:
  public static class Car {
    public String name;
    public String make;
  }

  */

  private List<Car> cars;
  Cars() {
    cars = new ArrayList<Car>();
    cars.add(...)
  }

  // ... functions to deal with Cars
  // or simply return the entire list
  public List<Car> getList() {
    return cars;
  }
}

然后,您可以参考Cars.theCars.getList()

来获取汽车

答案 1 :(得分:2)

你的bean必须包含以下元素

public class Car{
   String name,platenumber,model, etc......

   //getters and setters

}

出于缓存目的,您可以将它放在主类中。

public class Main{

    public static List<Car> carList;

  public static void main(String[] args){

     //do what you want to do here
  }

}

public class OtherClassAccessCarList{

  public void someMethod(){
    //how to access static field properly
    Main.carList.add(new Car());
  }

}

参考:link1 link2