2013-03-28 48 views
10

在Java和Android,我最终使用ArrayList<String>的供应名单,因为我觉得他们更容易比标准String[]使用。我真正的问题是这样的:

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

谢谢!指定类型的ArrayList

+8

Google java泛型 – david99world

+1

它被称为_type parameter_。 –

+0

对象输入<> –

回答

7

在这里了,你会也许看到更清晰的:

ArrayList<TypeOfYourClass> 

您可以创建一个Person类,并把它传递给一个ArrayList,因为这片段是显示:

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

就像你可以创建一个像MyClass []一样的数组,你也可以创建'ArrayList ',通过Array获得ArrayList的功能? – Adam

+0

ArrayList中有几个功能是您在数组类型中找不到的Collection类。例如,你可以找到一个“add”方法,通过这个方法,你可以动态地添加对象到你的列表中,你可以找到一个remove方法,一个size(),除了这样一个事实:即时分配数组的内存和它们的大小,因此,从一开始就固定下来,如果您将大小为20的人阵列化,则不能向该阵列添加超过20人。集合做。 – javadev

5

<String>部分是型参数。它提供了各种各样的类型参数的“价值”,这是在ArrayList<E>E ...以同样的方式,如果你有一个方法:

public void foo(int x) 

和你叫它

foo(5) 

所述参数是x,以及提供的参数是5。基本上,类型参数和类型参数是通用等效的。

section 4.5 of the JLS(和它的链接)的一些细节 - 和Java Generics FAQ关于仿制药比你更多信息就有可能要阅读:)

1

查找用于Java的泛型语法。这会让你保持直线(很好,很多人认为Java的方法不如C++和C#)。

+1

你不得不,不是吗? –

2

Supose你想一个ArrayList只填充字符串。 如果你写:

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

你可以肯定比如果有人试图用它将于请编译时被检测到一个int,以填补该ArrayList。

因此,仿制药在您要执行这样的限制的情况下使用。

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

另外,如果你不传入类型参数,我敢肯定你的代码仍然会编译。但它不会工作。