Java泛型

来源:互联网 发布:网络教育统考报名时间 编辑:程序博客网 时间:2024/06/03 05:56

泛型使得可以编写参数化的类型,并且可以通过传递一个或多个引用类型来创建它的实例,对象将仅限于这些类型。例如,java.util.List接口就是泛型,如果通过传递java.lang.String创建List,那么将会得到一个只存储String的List。除了参数化的类型外,泛型还支持参数化的方法。
就像方法一样,泛型类型也可以接受参数,这也是泛型类型经常被称为参数化类型的原因。不像在方法中那样,把基本类型或者对象引用放在圆括号里进行传递,而是将引用类型放到尖括号里传递给泛型类型。

import java.util.List;import java.util.ArrayList;public class GenericListTest {    public static void main(String[] args) {        // TODO Auto-generated method stub        //without generics        //无参泛型类型称为原始类型        List stringList1=new ArrayList();        stringList1.add("Java");        stringList1.add("without generics");        //cast to java.lang.String        String s1=(String) stringList1.get(0);          System.out.println(s1.toUpperCase());        //with generics and diamond        //从Java5开始,如果没有使用带有参数的泛型类型,编译器将会发出警告,他认为你可能忘记用泛型类型定义类型常量了        List<String> stringList2=new ArrayList<>(); //Java7        //List<String> stringList2=new ArrayList<String>();        stringList2.add("Java");        stringList2.add("with generics");        //no type casting is necessary        String s2=stringList2.get(0);        System.out.println(s2.toUpperCase());    }}

StringList2是一个泛型List,声明List告诉编译器:List的这个实例只能存储String,检索List的成员元素时,不需要进行类型转换,因为他的get方法会返回预期的类型,即String。

泛型类型在编译时进行类型检查。

泛型类型也是一个类型,并且可以用作类型变量。

import java.util.ArrayList;import java.util.List;public class ListOfListsTest {    public static void main(String[] args) {        // TODO Auto-generated method stub        List<String> listOfStrings=new ArrayList<>();        listOfStrings.add("Hello again");        List<List<String>> listOfLists=new ArrayList<>();        listOfLists.add(listOfStrings);        String s=listOfLists.get(0).get(0);        System.out.println(s);  //Hello again    }}

泛型可以接受不止一个类型变量。java.lang.Map接口有两个类型变量,第一个定义了他的键类型,第二个定义了他的值类型。使用泛型Map的例子。

import java.util.HashMap;import java.util.Map;public class MapTest {    public static void main(String[] args) {        // TODO Auto-generated method stub        Map<String, String> map=new HashMap<>();        map.put("key1", "value1");        map.put("key2", "value2");        String value1=map.get("key1");    }}
0 0
原创粉丝点击