java – Generics:输入变量?
发布时间:2020-12-15 02:07:29 所属栏目:Java 来源:网络整理
导读:为了能够替代特定的实现,通常知道写 ListAnyType myList = new ArrayListAnyType(); 代替 ArrayListAnyType myList = new ArrayListAnyType(); 这很容易理解,这样您可以轻松地将实现从ArrayList更改为LinkedList或任何其他类型的List. 嗯……这一切都很好,但
为了能够替代特定的实现,通常知道写
List<AnyType> myList = new ArrayList<AnyType>(); 代替 ArrayList<AnyType> myList = new ArrayList<AnyType>(); 这很容易理解,这样您可以轻松地将实现从ArrayList更改为LinkedList或任何其他类型的List. 嗯……这一切都很好,但由于我不能直接实例化“List”,因此我需要输入 public List<AnyType> getSpecificList() { return new ArrayList<AnyType>(); } 这使得以前的模式毫无意义.如果我现在想用LinkedList而不是ArrayList替换实现怎么办?它需要在两个位置上进行更改. 有可能有这样的东西(我知道语法绝对不正确)? public class MyClass<T> { Type myListImplementation = ArrayList; List<T> myList = new myListImplementation<T>(); public List<T> getSpecificList() { return new myListImplementation<T>(); } } 这将允许我简单地将单词“ArrayList”更改为“LinkedList”,一切都很好.我知道这两个列表可能有不同的构造函数,这不会“按原样”工作.我真的不想添加第二个类型参数来指定正在使用的列表实现. 是否有任何干净的机制来解决这个问题?^ 在此先感谢您的问候 解决方法
为什么不使用某种
factory pattern而不是直接实例化特定的列表实现.然后,您需要在工厂方法内的一个位置更改列表实现.
例如,您从以下开始: List<T> createList() { return new ArrayList<T>(); } List<T> myList1 = createList(); List<T> myList2 = createList(); 稍后,如果您决定需要链接列表,则只需更改createList()的实现,其余代码保持不变. List<T> createList() { return new LinkedList<T>(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |