加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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”,一切都很好.我知道这两个列表可能有不同的构造函数,这不会“按原样”工作.我真的不想添加第二个类型参数来指定正在使用的列表实现.

是否有任何干净的机制来解决这个问题?^

在此先感谢您的问候
Atmocreations

解决方法

为什么不使用某种 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>();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读