Ваша проблема в том, что вы создаете static
методы, в которых вы затем пытаетесь получить доступ к переменной non-static
, в данном случае это fleetlist
.Это приведет к ошибке, которую вы показываете.
Поскольку вы используете конструктор и все, вам не нужно вызывать метод static
.Называя его статическим, вы сможете вызывать метод без необходимости создания объекта, который, как я вижу, не является тем, к чему вы стремитесь.
Короче говоря, сделайте ваши методы нестатичными, удаливstatic
ключевое слово из объявления метода и доступ к вашим методам, таким как addTruck()
и createFleet()
через использование инициализированного объекта Fleet
.
С другой стороны, вы можете объявить свой список флотов какstatic, вот так:
private static ArrayList<Truck> fleetList;
РЕДАКТИРОВАТЬ: увидев ваш комментарий, вот как вы можете это сделать:
В Java считается хорошей практикой инкапсулировать переменные объекта, чтобы вы моглиможет лучше контролировать доступ к такой переменной, так что вы можете сделать что-то подобное в вашем Fleet
классе:
private List<Truck> fleetList;
public Fleet(String businessName){
this.businessName = businessName;
this.fleetList = new ArrayList<Truck>();
}
public List<Truck> getFleetList()
{
return this.fleetList;
}
В вашем FleetUI
классе вы можете сделать что-то вроде этого:
private ArrayList<Fleet> fleetCollection;
...
for (Fleet fleet : this.fleetCollection)
{
for (Truck truck : fleet.getFleetList())
{
//Do something with your truck here
}
}
РЕДАКТИРОВАТЬ 2: Чтобы добавить грузовик в ваш массив, вы можете сделать это двумя способами.Предположим, что объект fleet
- это флот, в который вы хотите добавить свой грузовик.В вашем FleetUI
классе вы можете сделать так:
fleet.getFleetList().add(new Truck(...))
Другой (и, на мой взгляд, лучший способ) метод addTruck
в вашем fleet
объект вроде так:
public void addTruck(Truck truck)
{
this.fleetList.add(truck);
}