ArrayList в параметрах объекта
Меня интересует как в параметрах объекта использовать ArrayList. Например есть описание объекта Shelf
class Shelf {
private int id;
private static int staticId = 10101;
private String description;
private ArrayList<Item> items;
public Shelf(String description, ArrayList<Item> items) {
this.id = staticId;
staticId++;
this.description = description;
this.items = items;
}
public void setItems(ArrayList<Item> items) {
this.items = items;
}
}
Есть несколько предметов
Item i = new Item("Shelf", 1, 12, "Shelf", v);
Item ii = new Item("Frozen", 3, 150, "120*250cm", v);
Item cup = new Item("Coffee cup", 1, 5, "A cup for coffee" ,v);
Нужно в параметр items положить что нибудь, например cup.
Shelf emptyShelf = new Shelf("Shelf for cups", cup);
Это так не работает.
Как добавить cup в emptyShelf?
Наверное я не правильно формулирую свой вопрос, и по этому не могу найти ответ в гугле. Буду очень благодарен, если кто то поймёт и поможет :)
Ответы (2 шт):
Ну если я правильно понял, то можно вот так сделать:
Измените ваш конструктор класса Shelf:
private int id;
private static int staticId = 10101;
private String description;
private ArrayList<Item> items = new ArrayList<>();
public Shelf(String description, Item...items) {
this.id = staticId;
staticId++;
this.description = description;
this.items.addAll((Arrays.asList(items));
}
Ну а потом при создании нового объекта Shelf можете положить в параметры items, нужное количество items через запятую:
Item table = new Item("Shelf", 1, 12, "Shelf", v);
Item bottle = new Item("Frozen", 3, 150, "120*250cm", v);
Item cup = new Item("Coffee cup", 1, 5, "A cup for coffee" ,v);
Shelf emptyShelf = new Shelf("Shelf for cups", cup);
Shelf emptyShelf = new Shelf("Shelf for cups", table, bottle);
Вы ищете способ создать массив из элементов.
Есть несколько вариантов, которые могут сработать в зависимости от ваших потребностей.
Arrays.asList
Arrays.asList(cup) создаст массив и его можно сразу передать, как параметр:
Shelf emptyShelf = new Shelf("Shelf for cups", Arrays.asList(cup));
Нужно иметь ввиду, что asList возвращает массив, размер которого нельзя менять, т.е. нельзя добавлять или удалять элементы. Нельзя будет добавить позже элементы так:
emptyShelf.getItems().add(ii); // бросит UnsupportedOperationException
Но при этом можно менять отдельные элементы в массиве:
emptyShelf.getItems().set(0, ii); // заменит первый элемент
Есть вариант это обойти в конструкторе:
Shelf(..., List<Items> items) {
this.items = new ArrayList<>;
this.items.addAll(items);
}
Collections.singltonList
Похоже немного на Arrays.asList с одним элементом, но возвращает полностью неизменяемый массив. Даже set не будет работать.
Вручную создать ArrayList
ArrayList<Item> items = new ArrayList<>();
items.add(cup);
Shelf emptyShelf = new Shelf("Shelf for cups", items);
Lists.newArrayList из библиотеки guava
Самый удобный способ если требуется изменяемый объект, но требует внешнюю библиотеку:
Shelf emptyShelf = new Shelf("Shelf for cups", Lists.newArrayList(cup));