指定ArrayList的类型

时间:2013-03-28 14:08:58

标签: java arrays generics arraylist

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

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

6 个答案:

答案 0 :(得分:7)

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

ArrayList<TypeOfYourClass>

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

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

答案 1 :(得分:5)

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

public void foo(int x)

你打电话给:

foo(5)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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

你可以肯定,如果有人试图用int填充arrayList,它将在complile time中被检测到。

因此,泛型用于你想要这样的强制限制的情况。

答案 4 :(得分:1)

查找Java的泛型语法。这将使你顺利(好吧,有点;很多人发现Java的方法不如C ++和C#)。

答案 5 :(得分:1)

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

以下是Generic类定义的示例

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...

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