interface Borrowable {
Date getCheckoutDate();
Date getDudeDate();
void setCheckoutDate(Date d);
void setDudeDate(Date d);
}
В следующем классе есть все функции, которые имеет арраист. Я тестировал их все, и они отлично работают.Почему класс # getComponentType возвращает null вместо общего типа ArrayList (Java)?
class LibraryCollection<E> {
ArrayList<E> items = new ArrayList<>();
public Iterator<E> iterator() {return items.iterator();}
boolean add(E o) {return items.add(o);}
boolean addAll(Collection<? extends E> c) {...}
...
.....
......
}
здесь, где я не могу понять до, как сделать «T [] getOverDueBooks (дата дата)», чтобы вернуть действительный массив. Я пытаюсь сделать это, потому что это требование в моем классе java.
class ChechOutCart<E extends Borrowable> extends LibraryCollection<E> {
ArrayList<E> dueOnSpecificDate = new ArrayList<>();
ArrayList<E> dueOn = new ArrayList<>();
<T> T[] getOverDueBooks(Date date) {
T[] a = (T[]) java.lang.reflect.Array.newInstance(items.getClass().getComponentType(), items.size());
Borrowable current;
DVD d;
Book b;
for (int i = 0; i < items.size(); i++) {
current = this.items.get(i);
if (current instanceof Book) {
b = (Book) current;
if (date.after(b.getDudeDate())) {
dueOn.add(this.items.get(i));
}
} else if (current instanceof DVD) {
d = (DVD) current;
if (date.after(d.getDudeDate())) {
dueOn.add(this.items.get(i));
}
}
}
return dueOn.toArray(a);
}
}
в основном я сделал cauple из DVD и объектов книги, и они полностью инициализированы я опустил инициализацию причина слишком долго. Я поставил тогда в MyCar
public static void main(String[] args) {
ChechOutCart<Borrowable> myCar = new ChechOutCart<>();
Borrowable[] array;
DVD dvd1 = new DVD();
DVD dvd2 = new DVD();
Book book1 = new Book();
Book book2 = new Book();
myCar.add(book2);
myCar.add(dvd1);
myCar.add(book1);
myCar.add(dvd2);
array = myCar.getOverDueBooks(new Date(115, 03, 23));
System.out.println(array);
}
и ошибки, которые я получил
Exception in thread "main" java.lang.NullPointerException
at java.lang.reflect.Array.newArray(Native Method)
at java.lang.reflect.Array.newInstance(Array.java:75)
at labb_part_b.ChechOutCart.getOverDueBooks(LabB_Part_B.java:40)
at labb_part_b.LabB_Part_B.main(LabB_Part_B.java:147)
Java Result: 1
Я новичок в Java. любая идея или примеры, которые я могу использовать, чтобы выполнить эту задачу, я оценю навсегда ... спасибо
Название вопроса может быть улучшено. Предложение: «Почему класс # getComponentType не возвращает общий тип ArrayList?» Возможно, связано: [Как создать общий массив в Java?] (Http://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java) – stholzm