Java抽象方法与接口
我有一个接口Java抽象方法与接口,java,generics,Java,Generics,我有一个接口HTTPSequence。我还有一个抽象类AbstractHTTPFactory,它又有一个返回ArrayList的抽象方法。在从AbstractHTTPFactory派生的类中,我希望重写这些方法以返回ArrayList 可能吗?现在,编译器给出了一个错误,建议我将重写的方法签名更改为HTTPSequence // abstract class with abstract method returning ArrayList of objects implementing inte
HTTPSequence
。我还有一个抽象类AbstractHTTPFactory
,它又有一个返回ArrayList
的抽象方法。在从AbstractHTTPFactory
派生的类中,我希望重写这些方法以返回ArrayList
可能吗?现在,编译器给出了一个错误,建议我将重写的方法签名更改为HTTPSequence
// abstract class with abstract method returning ArrayList of objects implementing interface
abstract public class AbstractHTTPFactory {
abstract ArrayList<HTTPSequence> make();
}
// Specific class that returns ArrayList of objects of the class implementing HTTPSequence
public class RecipesHTTPFactory extends AbstractHTTPFactory{
public ArrayList<Recipe> make() {
}
}
// interface
public interface HTTPSequence {
}
// one of the classes implementing the above interface
public class Recipe implements HTTPSequence {
}
//抽象类,其抽象方法返回实现接口的对象的ArrayList
抽象公共类AbstractHTTPFactory{
抽象数组列表make();
}
//返回实现HTTPSequence的类的对象的ArrayList的特定类
公共类RecipesHTTPFactory扩展了AbstractHTTPFactory{
公共阵列列表make(){
}
}
//接口
公共接口HTTPSequence{
}
//实现上述接口的类之一
公共类Recipe实现HTTPSequence{
}
Eclipse给我的信息是:
这条线上有多个标记
-返回类型与AbstractHTTPFactory.make()不兼容
-实现…ider.AbstractHTTPFactory.make
您可以将AbstractClass方法编写为返回
ArrayList您可以将AbstractClass方法编写为返回ArrayList以下设计将允许您避免必须返回通配符泛型类型:
抽象公共类AbstractHTTPFactory{
抽象数组列表make();
}
公共类RecipesHTTPFactory扩展了AbstractHTTPFactory{
公共ArrayList make(){…}
}
现在,您可以调用new recipes httpfactory().make()
并返回ArrayList
而不是ArrayList。以下设计将允许您避免返回通配符泛型类型,这些类型为:
抽象公共类AbstractHTTPFactory{
抽象数组列表make();
}
公共类RecipesHTTPFactory扩展了AbstractHTTPFactory{
公共ArrayList make(){…}
}
现在您可以调用new recipes httpfactory().make()
并返回ArrayList
而不是ArrayList为什么只返回非泛型ArrayList
?这违背了泛型的目的!一些示例代码将非常有用。还有一个确切的编译器消息。挥手没有帮助,@user971155为什么只想返回一个非泛型的ArrayList
?这违背了泛型的目的!一些示例代码将非常有用。还有一个确切的编译器消息。挥手没用,@user971155似乎正是我需要的。谢谢这是一个时间限制,好吧,除了现在似乎正是我需要的。谢谢有时间限制,好的,除了现在
abstract public class AbstractHTTPFactory<T extends HTTPSequence> {
abstract ArrayList<T> make();
}
public class RecipesHTTPFactory extends AbstractHTTPFactory<Recipe> {
public ArrayList<Recipe> make() { ... }
}