gpt4 book ai didi

java - 泛型:类型为变量?

转载 作者:搜寻专家 更新时间:2023-11-01 03:57:37 24 4
gpt4 key购买 nike

为了能够代入特定的实现,众所周知的写法

List<AnyType> myList = new ArrayList<AnyType>();

代替

ArrayList<AnyType> myList = new ArrayList<AnyType>();

这很容易理解,这样您就可以轻松地将实现从 ArrayList 更改为 LinkedList 或任何其他类型的 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>();
}

关于java - 泛型:类型为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1539038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com