Java 声明子类时不兼容的类型
有了这段代码,编译器告诉我我有不兼容的类型(“required SetJava 声明子类时不兼容的类型,java,oop,inheritance,abstract-class,Java,Oop,Inheritance,Abstract Class,有了这段代码,编译器告诉我我有不兼容的类型(“required Set但have Set”) import java.util.Set; 类clazz扩展了抽象类{ 私人设置项目; @凌驾 设置getItems(){ return items;//此处的类型不兼容 } } 抽象类抽象类{ 抽象集合getItems(); } 接口项{ } 接口武器扩展项{ } 我不明白,如果武器是物品的子界面,我想我应该可以用它来代替物品 我可以通过写作来解决这个问题 import java.util.Set;
import java.util.Set;
类clazz扩展了抽象类{
私人设置项目;
@凌驾
设置getItems(){
return items;//此处的类型不兼容
}
}
抽象类抽象类{
抽象集合getItems();
}
接口项{
}
接口武器扩展项{
}
我不明白,如果武器是物品的子界面,我想我应该可以用它来代替物品
我可以通过写作来解决这个问题
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();
}
import java.util.Set;
类clazz扩展了抽象类{
私人设置项目;
@凌驾
设置不是每个项目都是武器这就是为什么不能将其作为设置返回。使用设置不是每个项目都是武器这就是为什么不能将其作为设置返回。使用设置很简单
您的方法应为Set
Set getItems(){
return items;//此处的类型不兼容
}
但是您正在返回Set
当需要作为基类对象列表时,不能返回子类对象列表
然而,当基类对象列表预期为子类对象列表时,您可以返回该列表。(共变量返回)很简单
您的方法应为Set
Set getItems(){
return items;//此处的类型不兼容
}
但是您正在返回Set
当需要作为基类对象列表时,不能返回子类对象列表
但是,当基类对象列表作为子类对象列表时,您可以返回它。(Co variant return)这个家伙的答案可能会解决您的问题。他有很好的解释这个家伙的答案可能会解决您的问题。他有很好的解释
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();
}
Set<Item> getItems() {
return items; //Incompatible Types here
}