Мне интересно, как отредактировать мой код, чтобы я мог удалить элементы в методе cleanShelf, основываясь не только на том, прошли ли они их использование по дате, но и по тому, были ли они открыты. Проблема в том, что свойство dateOpened принадлежит только элементам типа DiaryFood, и я не знаю, как получить к нему доступ в моем классе Shelf.Наследование Java: как удалить элементы из ArrayList в зависимости от свойства, которое не принадлежит всем элементам?
Питание:
public abstract class Food {
private String name;
private int calorieAmount;
private int useDate;
public Food(String name, int calorieAmount, int useDate) {
this.name = name;
this.calorieAmount = calorieAmount;
this.useDate = useDate;
}
public String getName() {
return name;
}
public int getuseDate() {
return useDate;
}
}
DiaryFood:
public class DiaryFood extends Food {
private int dateOpened;
public DiaryFood(String name, int calorieAmount, int useDate, int dateOpened) {
super(name, calorieAmount, useDate);
this.dateOpened = dateOpened;
}
public int getdateOpened() {
return dateOpened;
}
}
VegFood:
public class VegFood extends Food {
private String colour;
public VegFood(String name, int calorieAmount, int useDate, String colour) {
super(name, calorieAmount, useDate);
this.colour = colour;
}
}
Полка:
public class Shelf {
ArrayList<Food> food;
public Shelf() {
food = new ArrayList<Food>();
}
public void addFood(Food product) {
this.food.add(product);
}
public void printShelfDetails() {
for (Food f : food)
{
System.out.println(f.getName() + " " + f.getuseDate());
}
}
public void cleanShelf(int day) {
ArrayList<Food> foodToRemove = new ArrayList<Food>();
for (int i = 0; i < food.size(); i++) {
if (food.get(i).getuseDate() < day) {
foodToRemove.add(food.get(i));
}
}
food.removeAll(foodToRemove);
}
}
Я бы не предложил этот метод. Это добавляет накладные расходы общественности api в пути. Почему бы не предложить использовать «интерфейс» вместо этого? – Adowrath
интерфейс или нет, если вы не хотите, чтобы бросить, вам нужно изменить api. Все зависит от того, чего хочет пользователь: делать броски или открывать контракт. Вот почему я уточнил это в своем ответе. – davidxxx
Эта часть как-то сбежала из моего сознания, извините. – Adowrath