使用和声明泛型 List<T>
Posted
技术标签:
【中文标题】使用和声明泛型 List<T>【英文标题】:Using and declaring generic List<T> 【发布时间】:2012-12-30 14:08:14 【问题描述】:所以我正在使用 Java,我想声明一个通用列表。
所以到目前为止我正在做的是List<T> list = new ArrayList<T>();
但现在我想添加一个元素。我怎么做?通用元素是什么样的?
我尝试过执行类似 List.add("x") 的操作,以查看是否可以添加字符串,但这不起作用。
(我没有声明List<String>
的原因是因为我必须将此列表传递给另一个仅以List<T>
作为参数的函数。
【问题讨论】:
你试过传递 ListList<T>
的函数的文档,这很可能是它所属类的通用参数。您很可能是在您自己的代码中某个位置定义此 T
的人。
T 不是具体类型,而是泛型类型。你能粘贴“另一个函数”的签名吗?
你可以使用List<Object> list = new ArrayList<Object>()
,当你通过get(int index)
得到一个元素后,将其向下转换为与另一个函数兼容的desired类。
@AlvinWong:请不要建议使用原始类型。
【参考方案1】:
T 是您的列表将包含的对象的类型。
你可以写List<String>
并在需要List<T>
的函数中使用它,这应该不是问题,因为T用来表示它可以是任何东西。
【讨论】:
【参考方案2】:您不能直接将“X”(字符串)添加到类型为的列表中,因此您需要编写一个接受 T 作为参数并添加到列表中的函数,例如
List<T> myList = new ArrayList<T>(0);
public void addValue(T t)
myList.add(t);
在调用这个函数时你可以传递字符串。
object.addValue("X");
【讨论】:
【参考方案3】:你应该有一个泛型类或一个泛型方法,如下所示:
public class Test<T>
List<T> list = new ArrayList<T>();
public Test()
public void populate(T t)
list.add(t);
public static void main(String[] args)
new Test<String>().populate("abc");
【讨论】:
或者像public <T extends SomeThing> T method(T arg)
这样的方法声明中的通用事物(尽管这可能是一个比OP当前更复杂的情况)。
谢谢!这帮助我修复了它。
@akaIDIOT 是的,我的回答中确实包含了or generic method
:)以上是关于使用和声明泛型 List<T>的主要内容,如果未能解决你的问题,请参考以下文章