Java中类似于C# .NET泛型列表的东西

13

如何在Java中实现C# .NET的泛型列表?

类似于以下代码:

public class ClientList : List<Client> { }
尼基尔的答案非常完美,我只想为那些想要从列表创建类的人添加一点内容:
public class ClientList extends ArrayList<Client>
1个回答

24

Java的List接口(java.util.List)可以使用泛型。换句话说,List的实例可以被赋予一个类型,因此只有该类型的实例可以被插入和读取。以下是一个示例:

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

这个列表现在只能包含字符串实例,也就是说只有字符串实例可以放入该列表中。如果您尝试将其他类型的对象放入该列表中,编译器将会报错。

泛型类型检查仅在编译时存在。在运行时,可以调整代码使字符串列表拥有其他插入的对象。虽然这样做是一个坏主意。

访问泛型列表

您可以像这样获取并插入泛型列表的元素:

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

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

String string2 = list.get(0);

注意到从List.get()方法调用获得的对象不需要进行类型转换,这通常是必要的。编译器知道这个List只能包含字符串实例,因此不需要强制转换。

遍历泛型列表

您可以使用迭代器迭代泛型列表,像这样:

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

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

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

注意,从iterator.next()方法返回的对象不需要强制转换。因为List被泛型化(有类型),编译器知道它包含String实例。因此,即使来自其Iterator,也不需要强制转换从中获取的对象。

你也可以使用新的for循环,就像这样:

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

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

注意在for循环的括号中声明了一个String变量。对于每次迭代(列表中的每个元素),该变量包含当前元素(当前的String)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接