With this code, compiler tells me I have incompatible Types ("required Set< Item> but have Set< Weapon>").
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 {
}
I don't get it, if Weapon is a subInterface of Item, I think I should be able to use it in place of Items.
I can fix the problem by writing
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();
}
Can you explain to me why is this not permitted ?