我想知道如何声明一个方法将返回特定类的实例。
例如:
抽象类 A 声明了一个必须返回“List”实例的方法(method1) 类 B 和 C 扩展了 A。我希望 B 返回一个 ArrayList,而 C 返回一个 LinkedList。
我该如何实现呢?谢谢
最佳答案
如果您希望调用者知道它正在获取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() {
//...
}
}
或者,如果您要直接与 B
和 C
交互(而不是通过 A
),那么您可以利用协变返回类型只需让子类分别将返回类型声明为 ArrayList 和 LinkedList 即可。在 Java 5+ 中缩小重写方法的返回类型是合法的。
如果调用者不需要知 Prop 体类型,那么您只需将创建列表的策略(即工厂)传递给A
。这可以通过实现一个简单的接口(interface)来完成:
public interface ListFactory<T> {
public List<T> newList();
}
然后将其传递给A
的构造函数。事实上,工厂可以用任何一种方式使用,但是如果您处于我描述的第一种情况,则只需要类 B
和 C
。
关于java - 在方法中返回类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364140/