Это задача из Hyperskill.org .
Инструкции для задачи:
Вам необходимо добавить реализацию в Violator.defraud ( ), который будет выполнять следующие действия:
Создать список ящиков в соответствии с сигнатурой метода Поместить объект Paper хотя бы в один ящик в списке Полученный список должен пройти проверку NaiveQualityControl. Не следует изменять сигнатуру метода или изменять код любых других классов, просто добавьте реализацию к методу обмана.
/* This class and its subclasses should pass quality check */
class Bakery {}
class Cake extends Bakery {}
/* But this should not */
class Paper {}
/* These boxes are used to pack stuff */
class Box<T> {
void put(T item) { /* implementation omitted */ }
T get() { /* implementation omitted */ }
}
/* This quality checker ensures that boxes for sale contain Bakery and anything else */
class NaiveQualityControl {
public static boolean check(List<Box<? extends Bakery>> boxes) {
/* Method signature guarantees that all illegal
calls will produce compile-time error... or not? */
return true;
}
}
Это метод, который нужно реализовать;
class Violator {
public static List<Box<? extends Bakery>> defraud() {
// Add implementation here
}
}
Пока что у меня есть это;
public static List<Box<? extends Bakery>> defraud() {
List<Box<? extends Bakery>> boxList = new ArrayList<>();
Box<Paper> paperBox = new Box<>();
Box<Bakery> bakeryBox = new Box<>();
Box<Cake> cakeBox = new Box<>();
boxList.add(bakeryBox);
boxList.add(cakeBox);
boxList.add(paperBox); // compile time error, required type <? extends Bakery>
return boxList;
}
Очевидно, это не запустится. Я пробовал использовать Object
как тип, но это выходит за рамки <? extends Bakery>
. Я не могу преобразовать paperBox
в тип <? extends Bakery
Box
.