只是想问下面我创建的类是否正确,或者是否由于使用静态对象列表而导致错误,并且我的封装实现正确,因为我需要限制对静态变量的访问。 / 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"));
. . .
. . .
依旧......
答案 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());
}
}