【问题标题】:Using and declaring generic List<T>使用和声明泛型 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:请不要建议使用原始类型。

标签: java list generics object arraylist


【解决方案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 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2014-02-26
      • 1970-01-01
      • 2013-08-13
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多