У меня есть интерфейс Vegetable, например, с яблоками, морковью ... У меня есть класс Collector универсального типа, он может быть Collector из цветной капусты, моркови и т. Д. Мне нужно реализовать функцию, чтобы датьПеренесенный объект одного коллекционера в другой, проблема в том, что если я попробую Collector.giveTo (Collector), он не распознает, что яблоки расширены из Vegetable.Я попытался сделать это с instanceof, но безуспешно
Вот конструктор моего класса Collector:
/** define collectors able to collect (and carry) one specific type T of objects
* only one T object can be carried at a time
*/
public class Collector<T> {
private String name;
protected T carriedObject = null;
/**
* Creates a Collector object with a name and no carriedObject (carriedObject = null)
* @param name a String, the name of the Collector
*/
public Collector(String name) {
this.name = name;
this.carriedObject = carriedObject;
}
и код для некоторых используемых методов:
/**
* give the carriedObject to another Collector
* @param other the Collector to give the carriedObject to
* @throws AlreadyCarryingException if the other Collector is already carrying an object
*/
public void giveTo(Collector<T> other) throws AlreadyCarryingException {
if (this instanceof Vegetable && other instanceof Vegetable){
if (other.getCarriedObject() != null){
throw new AlreadyCarryingException("Le collector porte deja un objet");
}
else {
other.take(this.drop());
}
}
/**
* drops the carriedObject setting it to null
*/
public T drop(){
T tmp = this.carriedObject;
this.carriedObject = null;
return tmp;
}
/**
* allows the Collector to take an object and sets it as his carriedObject
* @param object the Object to take
* @throws AlreadyCarryingException if the Collector is already carrying an object
*/
public void take(T object) throws AlreadyCarryingException {
//Collector is already carrying an object
if (this.carriedObject != null) {
throw new AlreadyCarryingException("Le collector porte deja un objet");
}
else{
this.carriedObject = object;
}
}
Пример: я добавил код взятия и удаления
и пример:
Collector<Carrot> carrotCollector1 = new Collector<Carrot>("carrot-collector-1");
Collector<Vegetable> vegetableCollector = new Collector<Vegetable>("vegetable-collector");
carrotCollector1.giveTo(vegetableCollector);
, и вот ошибка, которую я получаю:
МетодgiveTo (Collector) в типе Collector не применим для аргументов (Collector)