我想知道如何声明一个方法将返回一个特定类的实例.
例如:
抽象类A声明一个方法(method1),它必须返回一个"List"实例,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() {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果你要与之交互B和C直接(不通过A),那么你可以利用协变返回类型和简单的让子类声明的返回类型ArrayList和LinkedList分别.缩小被覆盖方法的返回类型在Java 5+中是合法的.
如果调用者不需要知道具体类型,那么您只想传递一个策略(即工厂)来创建列表A.这可以通过实现一个简单的接口来完成:
public interface ListFactory<T> {
public List<T> newList();
}
Run Code Online (Sandbox Code Playgroud)
然后将其传递给.的构造函数A.事实上,工厂可以使用任何一种方式,但是你只需要课程B,C如果你处于我描述的第一种情况.
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |