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() { ... }
}