使用和声明泛型 List<T>

Posted

技术标签:

【中文标题】使用和声明泛型 List<T>【英文标题】:Using and declaring generic List<T> 【发布时间】:2012-12-30 14:08:14 【问题描述】:

所以我正在使用 Java,我想声明一个通用列表。

所以到目前为止我正在做的是List&lt;T&gt; list = new ArrayList&lt;T&gt;();

但现在我想添加一个元素。我怎么做?通用元素是什么样的?

我尝试过执行类似 List.add("x") 的操作,以查看是否可以添加字符串,但这不起作用。

(我没有声明List&lt;String&gt; 的原因是因为我必须将此列表传递给另一个仅以List&lt;T&gt; 作为参数的函数。

【问题讨论】:

你试过传递 List 吗? 查看需要List&lt;T&gt; 的函数的文档,这很可能是它所属类的通用参数。您很可能是在您自己的代码中某个位置定义此 T 的人。 T 不是具体类型,而是泛型类型。你能粘贴“另一个函数”的签名吗? 你可以使用List&lt;Object&gt; list = new ArrayList&lt;Object&gt;(),当你通过get(int index)得到一个元素后,将其向下转换为与另一个函数兼容的desired类。 @AlvinWong:请不要建议使用原始类型。 【参考方案1】:

T 是您的列表将包含的对象的类型。 你可以写List&lt;String&gt;并在需要List&lt;T&gt;的函数中使用它,这应该不是问题,因为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 &lt;T extends SomeThing&gt; T method(T arg)这样的方法声明中的通用事物(尽管这可能是一个比OP当前更复杂的情况)。 谢谢!这帮助我修复了它。 @akaIDIOT 是的,我的回答中确实包含了or generic method :)

以上是关于使用和声明泛型 List<T>的主要内容,如果未能解决你的问题,请参考以下文章

泛型中extends和super的区别

泛型中? super T和? extends T的区别

Java里的泛型加通配符的用法

C#中的泛型和泛型集合

c#中的泛型

Java基础加强——泛型