返回方法中的类的实例

Add*_*dev 0 java inheritance

我想知道如何声明一个方法将返回一个特定类的实例.

例如:

抽象类A声明一个方法(method1),它必须返回一个"List"实例,B类和C扩展A.我希望B返回一个ArrayList,C返回一个LinkedList.

我该如何实现呢?谢谢

Mar*_*ers 6

如果您希望调用者知道它正在获取LinkedList或者ArrayList您可以利用泛型.

它看起来像这样:

public abstract class A<T extends List<String>> {
    public abstract T method()
}

public class B extends A<ArrayList<String>> {
    public ArrayList<String> method() {
        //...
    }
}

public class C extends A<LinkedList<String>> {
    public LinkedList<String> method() {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果你要与之交互BC直接(不通过A),那么你可以利用协变返回类型和简单的让子类声明的返回类型ArrayListLinkedList分别.缩小被覆盖方法的返回类型在Java 5+中是合法的.

如果调用者不需要知道具体类型,那么您只想传递一个策略(即工厂)来创建列表A.这可以通过实现一个简单的接口来完成:

public interface ListFactory<T> {

    public List<T> newList();
}
Run Code Online (Sandbox Code Playgroud)

然后将其传递给.的构造函数A.事实上,工厂可以使用任何一种方式,但是你只需要课程B,C如果你处于我描述的第一种情况.