【问题标题】:Specify the type for ArrayList指定 ArrayList 的类型
【发布时间】:2013-03-19 00:28:50
【问题描述】:

在 Java 和 Android 中,我最终使用 ArrayList<String> 作为供应列表,因为我发现它们比标准的 String[] 更易于使用。我真正的问题是:

ArrayList<String><String> 部分叫什么?
我如何创建类并使用 <> [修饰符]? (我不知道它实际上叫什么,所以现在它是修饰符)。

谢谢!

【问题讨论】:

  • 谷歌 java 泛型
  • 称为类型参数
  • 这不是一个具体的问题。这是通用问题,我们无法回答通用的每个方面。研究泛型。 (这个话题很大)

标签: java arrays generics arraylist


【解决方案1】:

在这里,你可能会看得更清楚:

ArrayList<TypeOfYourClass>

您可以创建一个 Person 类并将其传递给 ArrayList,就像这个 sn-p 显示的那样:

ArrayList<Person> listOfPersons = new ArrayList<Person>();

【讨论】:

  • 就像你可以创建一个像MyClass[]这样的数组,你也可以创建ArrayList&lt;MyClass&gt;,在数组上获得ArrayList的功能?
  • ArrayList 中有几个特性,它是一个集合类,在数组类型中是找不到的。例如,您可以找到一个“添加”方法,通过该方法您可以将对象动态添加到列表中,您可以找到一个删除方法,一个 size() 方法,除了在实例化时分配数组的内存及其大小这一事实,因此,从一开始就是固定的,如果你标记一个大小为 20 的人的数组,你不能将超过 20 人添加到数组中。收藏。
【解决方案2】:

&lt;String&gt; 部分是类型参数。它为 type 参数 提供了一个“值”,即 ArrayList&lt;E&gt;... 中的 E... 就像你有一个方法一样:

public void foo(int x)

然后你调用它:

foo(5)

参数是x,提供的参数是5。类型参数和类型参数基本上是通用的等价物。

有关更多详细信息,请参阅section 4.5 of the JLS(以及其中的链接)-有关泛型的更多信息,请参阅Java Generics FAQ :)

【讨论】:

    【解决方案3】:

    &lt;&gt; 之间的位是类型参数,该特征称为Generics

    【讨论】:

      【解决方案4】:

      假设您希望 ArrayList 仅填充字符串。 如果你写:

      ArrayList<String> list = new ArrayList<String>();
          list.add("A");
          list.add("B");
          list.add("C");
      

      你可以肯定的是,如果有人试图用 int 填充 arrayList,它将在编译时被检测到。

      因此,泛型用于您想要强制执行此类限制的情况。

      【讨论】:

        【解决方案5】:

        查找 Java 的 generics 语法。这会让你直截了当(嗯,有点;很多人发现 Java 的方法不如 C++ 和 C#)。

        【讨论】:

          【解决方案6】:

          是类型参数。在 Java 中,当类被编写为泛型时,您必须提供其中之一。

          这是一个通用类定义的示例

          private class GNode<T>
          {
              private T data;
              private GNode<T> next;
          
              public GNode(T data)
              {
                  this.data = data;
                  this.next = null;
              }
          }
          

          您现在可以创建传入的任何类型的节点。T 充当类定义的泛型类型参数。如果你想创建一个整数节点,只需:

           GNode<Integer> myNode = new GNode<Integer>();
          

          需要注意的是,你的类型参数必须是一个对象。这通过 Java 的自动装箱和自动拆箱工作。这意味着您不能使用 java 原始类型,而必须使用相应的类。

          Boolean instead of bool
          Integer instead of int
          Double instead of double 
          etc...
          

          另外,如果你不传入类型参数,我很确定你的代码仍然可以编译。但它不会起作用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-09-13
            • 1970-01-01
            • 1970-01-01
            • 2015-05-17
            • 2015-09-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多