java泛型详解

  

<强>首先请看如下代码:

        公开课generictype {   公共静态void main (String str []) {   Hashtable h=new散列表();   h。把(1,“字符串类型”);   int=(字符串)h.get (1);   System.out.println(一个);   }   }//执行结果   字符串类型//如果我们将上述由红色标出改的字符串为int执行后结果如下(更改后编译没有错误):   异常的线程“主要”. lang。ClassCastException: . lang。不能把java.lang.Integer字符串   genetictype.generictype.main (generic1.java: 10)      

以上就是强制类型转换可能带来的典型错误,然而这个错误在编译期间无法知道,以至于在运行期间jvm检查后抛出类型转换异常。

  

<强>再看下述代码:

        公开课generictype {   公共静态void main (String str []) {   String> Hashtable<整数;h=new Hashtable<整数,String> ();   h。把(1,“字符串类型”);   字符串a=h.get (1);   System.out.println(一个);   }   }//执行结果   字符串类型//需要提出的是1,上述由红色标出的字符串如果改为int,在编译的时候会报的错   2 .在h.get(1)前面不需要再进行强制类型转换。之前      

综上看来泛型的作用为:

  

1。就是是在编译的时候检查类型的安全(解决java中强制类型转换可能导致的错误),交给了编译器巨大的使命只

  

2。提高代码的重用率

  

<强>类型擦除:

  

类型擦除就是说编译器编译. java文件时,将类的泛型参数去掉,那么jvm加载字节码文件的时候对泛型不可见,这个过程就称为类型擦除。

  

与类型擦除有关的现象:

  

  

        公开课generictype   {   公共静态void main (String str []) {   test1t=新test1 ();   test1tt=new test1 ();   System.out.println (t.a);   System.out.println (tt.a);   }   }   类test1      

  

类型擦除的基本过程也比较简单:

  

1。将类型参数用顶级父类替换,这类一般是对象,如果指定了类型参数的上界的话,则使用这个上界。

  

, 2。去掉出现的类型声明,即去掉& lt;祝辞的内容。

  

例如:T get()方法声明就变成了对象();List就变成了。接下来就可能需要生成一些桥接方法(桥方法)。这是由于擦除了类型之后的类可能缺少某些必须的方法,比如考虑下面的代码:

        公开课generictype{公共静态孔隙主要(String str []) {   新test3 test3 t=();   t.getT (“11111”);   }   }   接口test2之前      

<强>泛型的分类:泛型类、泛型接口,泛型方法,泛型异常

  

<强>

        公开课generictype {   公共静态void main (String str []) {   String> test<整数;t=新test<整数,String> ();   t。把(1、“str1”);   t。把(2、“str2”);   System.out.println (t.get (1));   System.out.println (t.get (2));   }   }   类test{   公共Hashtableh=新Hashtable ();   公共空间把(T T V V) {   h。把(t, v);   }   公共V (T T) {   返回h.get (t);   }   }//执行结果   str1   str2      

在函数名前定义泛型参数,可以在传入参数列表,返回值类型、方法体里面引用

        公开课generictype {   公共& lt; T>字符串getString (T obj) {   返回obj.toString ();   }   公共静态void main (String str []) {   generictype g=new generictype();//不需要类的泛型   System.out.println (g.getString (1));   System.out.println (g.getString (' a '));   System.out.println (g.getString (“a”);   }   }//执行结果   一个   

java泛型详解