如何在Java中实现C# .NET的泛型列表?
类似于以下代码:
public class ClientList : List<Client> { }
尼基尔的答案非常完美,我只想为那些想要从列表创建类的人添加一点内容:public class ClientList extends ArrayList<Client>
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)。