Java泛型教程
Java泛型函数是从Java 5添加到Java语言的。泛型添加了一种方法,可以为以前在Object
上操作的通用类和方法指定具体类型。听起来有点抽象,所以我们将立即查看一些使用集合的示例。
注意:Java泛型可以与集合类以外的其他类一起使用,但是使用集合展示Java泛型的基础是最容易的。
Java泛型示例
"列表"接口代表"对象"实例的列表。这意味着我们可以将任何对象放入"列表"中。这是一个例子:
List list = new ArrayList(); list.add(new Integer(2)); list.add("a String");
因为可以添加任何对象,所以还必须强制转换从这些对象获得的所有对象。例如:
Integer integer = (Integer) list.get(0); String string = (String) list.get(1);
通常,我们只对集合使用单个类型。例如,我们只在集合中保留了String或者其他内容,而不像我在上面的示例中那样保留混合类型。
使用Java泛型函数,我们可以设置集合的类型,以限制可以在集合中插入哪种对象。此外,我们不必强制转换从集合中获取的值。这是一个使用Java的Generic函数的示例:
List<String> strings = new ArrayList<String>(); strings.add("a String"); String aString = strings.get(0);
Java 7类型推断
Java泛型函数已在Java 7中进行了更新。从Java 7中,Java编译器可以从分配给集合的变量中推断出实例化的集合的类型。这是一个Java 7泛型示例:
List<String> strings = new ArrayList<>();
注意如何省略了ArrayList的泛型类型。而是只写" <>"。有时也称为菱形运算符。当我们仅将Diamond运算符编写为泛型类型时,Java编译器将假定实例化的类与为其分配的变量具有相同的类型。在上面的示例中,这意味着String
,因为List
变量将String
设置为其类型。
Java泛型循环
Java 5还获得了一个新的for循环(也称为" for-each"),该循环可与泛型集合一起很好地工作。这是一个例子:
List<String> strings = new ArrayList<String>(); //... add String instances to the strings list... for(String aString : strings){ System.out.println(aString); }
这个for-each循环遍历保存在"字符串"列表中的所有"字符串"实例。对于每次迭代,将下一个String
实例分配给aString
变量。这个for循环比原始的while循环短,在该循环中,我们将迭代集合Iterator并调用Iterator.next()以获得下一个实例。
关于Java通用for循环的教程中更详细地描述了通用for循环(又名" for each loop")。
除集合以外的其他类型的Java泛型
当然,可以将泛型用于Java集合以外的其他类。我们也可以泛化自己的课程。有关泛型类,泛型方法以及将类对象用作类型文字的教程中更详细地介绍了在自己的类中使用Java泛型。