类似于java中的C#.NET Generic List

时间:2012-04-12 00:15:15

标签: c# java .net

如何在java中使用c#.net通用列表?

这样的事情:

public class ClientList : List<Client> { }

Nikil的回答非常完美,我只想添加到想要从列表中创建一个类的人:

public class ClientList extends ArrayList<Client>

1 个答案:

答案 0 :(得分:20)

可以对Java的List接口(java.util.List)进行泛化。换句话说,List的实例可以被赋予类型,因此只能插入该类型的实例并从该List中读取。这是一个例子:

List<String> list = new ArrayList<String>();

此列表现在仅针对String实例,这意味着只能将String实例放入此列表中。如果你试图将其他东西放入这个List中,编译器会抱怨。

泛型类型检查仅在编译时存在。在运行时,可以调整代码,以便String List包含插入String的其他对象。不过,这是一个坏主意。

访问通用列表

您可以像这样获取和插入通用List的元素:

List<String> list = new ArrayList<String>();

String string1 = "a string";
list.add(string1);

String string2 = list.get(0);

注意如何不必像通常那样转换从List.get()方法调用中获取的对象。编译器知道此List只能包含String实例,因此不需要强制转换。

迭代通用列表

您可以使用迭代器迭代通用List,如下所示:

List<String> list = new ArrayList<String>();

Iterator<String> iterator = list.iterator();

while(iterator.hasNext()){
    String aString = iterator.next();
}

注意如何不必抛出从iterator.next()下次调用返回的对象。因为List是通用的(具有类型),所以编译器知道它包含String实例。因此,没有必要投射从它获得的对象,即使它来自它的迭代器。

您也可以使用新的for循环,如下所示:

List<String> list = new ArrayList<String>();

for(String aString : list) {
    System.out.println(aString);
}

注意如何在for循环的parantheses中声明String变量。对于每次迭代(List中的每个元素),此变量包含当前元素(当前字符串)。