12

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

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

谢谢!

4

6 回答 6

8

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

ArrayList<TypeOfYourClass>

您可以创建一个 Person 类并将其传递给 ArrayList ,如此片段所示:

ArrayList<Person> listOfPersons = new ArrayList<Person>();
于 2013-03-28T14:14:19.643 回答
5

<String>部分是类型参数。它为in ... 的类型参数提供了一个“值” ,就像你有一个方法一样:EArrayList<E>

public void foo(int x)

你用以下方式调用它:

foo(5)

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

有关更多详细信息,请参阅JLS 的第 4.5 节(以及其中的链接) - 以及有关泛型的更多信息,而不是您可能想要阅读的Java Generics FAQ :)

于 2013-03-28T14:10:07.137 回答
2

之间的位<>是类型参数,该功能称为泛型

于 2013-03-28T14:11:32.493 回答
2

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

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

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

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

于 2013-03-28T14:17:55.780 回答
1

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

于 2013-03-28T14:11:49.287 回答
1

是类型参数。在 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...

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

于 2013-03-28T14:19:00.643 回答