Если у вас есть коллекция, вы можете addAll(someOtherCollection);
, но я не уверен, что полностью понимаю ваш вопрос: вы ссылаетесь на «конструктор для списка заимствований», но вы показываете конструктор для класса заимствования, который не является списком.
Вы, кажется, смешиваете экземпляр отдельного класса (например, Book
) с коллекцией или множеством этого класса: Book books
(почему это множественное число? Что вы пытаетесь выразить?)
Edit:
Исходя из вашего комментария, я думаю, что вы пытаетесь понять, как создать объекты Borrow для размещения в списке.
Разница между составленным списком сотрудников заключается в том, что вы «знаете» сотрудников заранее - хотя это и являются постоянными значениями.
Объект «Заимствовать», по-видимому, выражает конкретное лицо, которое позаимствовало конкретную книгу, причитающуюся к определенной дате. Если это так, вам нужно где-то эти данные, например, из базы данных. Причина, по которой у вас возникают проблемы, заключается в том, что вы пытаетесь построить эти объекты на своем Фасаде вместо того, чтобы просто инкапсулировать те, которые уже существуют.
public class Facade {
private List<Borrow> borrows = new ArrayList<Borrow>();
// Pass the items in to the constructor
public Facade(List<Borrow> borrows) {
this.borrows.addAll(borrows);
}
// You could call this externally in a loop to populate one by one
public void addBorrow(Borrow borrow) {
borrows.add(borrow);
}
}
Подводя итог: ваш объект Staff и ваши объекты Borrow должны откуда-то приходить, поэтому, если они уже находятся в коллекции, используйте addAll
, если нет, просто выполните итерации по списку и вызовите add
. Не конструируйте объекты на своих фасадах.
Редактировать 2:
В ответ на ваш исправленный вопрос вы не можете этого сделать. Вы пытаетесь добавить список конкретного объекта (Staff) в список объектов другого типа (Borrow). Это просто по своей сути неправильно. Я не совсем знаю, как еще это сказать. Если бы вы попросили меня дать вам список моих любимых вопросов о переполнении стека, ожидаете ли вы найти в этом списке моего любимого пользователя переполнения стека? Это фундаментальный характер безопасности типов. Теперь, если вы попросите меня дать вам список моих Любимых вещей , тогда вполне разумно ожидать, что вы найдете там различные типы вещей - вопросы о переполнении стека, вина, продукты питания и т. Д., Потому что они концептуально имеет общий Favourite
родительский класс или интерфейс.
Если быть откровенным, я думаю, что вам нужно (пере) прочитать базовую природу обобщений Java и безопасность типов, но в поисках всемогущей репутации, вот что:
Примечание: Я использую StaffMember
и BorrowedItem
в качестве имен здесь, чтобы попытаться проиллюстрировать значение хороших соглашений об именах.
Вы, кажется, хотите класс Facade
по причинам, которые никто из нас не понимает. Хорошо, мы можем принять это. Ваш класс Facade
содержит список объектов. Для этого вы создали несколько классов, без заметного различия между ними, за исключением того, какие объекты перечислены внутри. Дженерики на помощь:
public class Facade<T> {
private List<T> list = new ArrayList<T>();
public Facade(List<T> existingList) {
list.addAll(existingList);
}
}
Этот фасад содержит список объектов, что означает, что вы можете сделать это:
List<StaffMember> staffMembers= new ArrayList<StaffMember>();
// .. assume list is populated here
Facade<StaffMember> staffMembersFacade = new Facade<StaffMember>(staffMembers);
Аналогично, с тем же классом фасада:
List<BorrowedItem> borrowedItems = new ArrayList<BorrowedItem>();
// ... populate borrowed items
Facade<BorrowedItem> borrowedItemsFacade = new Facade<BorrowedItem<(borrowedItems);
Но вы не добавляете объекты StaffMember в заимствованный элементFacade . По крайней мере, не напрямую - в вашем примере BorrowedItem
имеет Date
, а также указывает, что StaffMember
заимствовал его.
Итак, на данный момент у вас есть два списка - список StaffMember
с и список BorrowedItem
с, но вы действительно должны спросить себя, для какой цели это служит? Разве не имеет смысла для одного StaffMember
иметь List<BorrowedItem>
, чтобы отслеживать все элементы , которые они позаимствовали?
class BorrowedItem {
Date dueDate;
StaffMember borrower;
}
class StaffMember {
String name;
List<BorrowedItem> borrowedItems;
}
Теперь это дает возможность добавить функцию к StaffMember
следующим образом:
List<BorrowedItem> getOverdueItems() {
List<BorrowedItem> overdueItems = new ArrayList<BorrowedItem>();
Date today = getTodaysDate(); // Calendar.getInstance etc.
for (BorrowedItem borrowedItem : borrowedItems) {
Date dueDate = borrowedItem.getDueDate();
if (today.after(dueDate)) {
overdueItems.add(borrowedItem);
}
}
return overdueItems;
}
Видите ли вы, как вам нужно создавать значимые отношения между этими классами, чтобы что-нибудь полезное произошло?
Затем вы можете добавить функции, позволяющие кому-то одолжить предмет другому человеку или взять что-то у кого-то и т. Д.
Так что да, Collections.addAll
это то, что вы ищете, я думаю.