Avec ce code, le compilateur me dit que j'ai des types incompatibles ("requis Set < Item> mais ont Set < Weapon>").Types incompatibles lors de la déclaration de la sous-classe
import java.util.Set;
class clazz extends AbstractClass{
private Set<Weapon> items;
@Override
Set<Item> getItems() {
return items; //Incompatible Types here
}
}
abstract class AbstractClass {
abstract Set<Item> getItems();
}
interface Item {
}
interface Weapon extends Item {
}
Je ne comprends pas, si l'arme est une sous-interface de point, je pense que je devrais pouvoir l'utiliser à la place des objets.
Je peux résoudre le problème en écrivant
import java.util.Set;
class clazz extends AbstractClass{
private Set<Weapon> items;
@Override
Set<? extends Item> getItems() {
return items;
}
}
abstract class AbstractClass {
abstract Set<? extends Item> getItems();
}
Pouvez-vous me expliquer pourquoi ce n'est pas permis?
Cette réponse de type peut résoudre votre problème. Il a une bonne explication https://stackoverflow.com/a/6319181/7450269 – RootOnChair