1.泛型的定义:
所谓泛型,就是变量类型的参数化。
泛型是JDK1.5中一个最重要的特征。通过引入泛型,我们将获得编译时类型的安全和运行时更小的抛出ClassCastException的可能。
在JDK1.5中,你可以声明一个集合将接收/返回的对象的类型。
使用泛型时如果不指明参数类型,即泛型类没有参数化,会提示警告,此时类型为Object。
2、为什么使用泛型:
在1.5之后我们有了拆箱装箱的概念,就是说你定义一个Object的类型,最后放进去一个Int的值,等到一系列的处理后,我们还需要将Object'的类型转换会Int,有的时候你放进去了一个String,再强转的时候会出问题,而你又不愿意定义这个变量为Int'的类型,因为有些时候它的确可以存放String的,而你又不太愿意在多定义。
以方法参数的泛型为例: call(Object obj) 你可以传String Int就比如刚才的强转问题,但是你如果定义call(String str)等你要用到Int的时候还要重新定义,需要重载方法,写N个有不同参数类型的方法,很麻烦
综上所述: 泛型就是为了解决这种隐藏数据转换带来的 运行时错误和简化方法的重载而出来的一种鬼 ORZ.
3、泛型的分类(楼主自己分的):
构造方法的泛型、接口泛型、泛型方法、泛型数组、多个泛型、通配符等。
3、泛型的分类(楼主自己分的):
构造方法的泛型、接口泛型、泛型方法、泛型数组、多个泛型、通配符等。
package com.berwin.java.generic; import java.security.PrivateKey; /** * Created by yangbowen-002 on 2016/2/25. */ public class GenericDemo1 { public static void main (String[] args){ Point p = new Point(); p.setX(10); p.setY(10); int px = (Integer) p.getX(); int py = (Integer)p.getY(); System.out.println("X=" + px + " y = "+py); // 泛型的定义一定要在定义类型的时候确定好具体类型,这里指的是PointA<String> PointA<String> pa = new PointA<String>(); pa.setX("1234");// 如果直接上1234 认为是integer,编译报错的 pa.setY("5678"); System.out.println("X=" + pa.getX() + " y = "+pa.getY()); Point p1 = new Point(); p1.setX(10.1f); p1.setY(10.2f); int p1x = (Integer) p1.getX(); //执行到这里的时候会报错,因为float不能强制转integer,但是成员变量X Y是Object的, // 所以变异的时候不会报错,但是执行就会出问题,运用了泛型 就可以解决,在变异阶段就查出原因了 int p1y = (Integer)p1.getY(); System.out.println("X1=" + p1x + " y1 = "+p1y); } } class Point{ private Object x; private Object y; public Object getX() { return x; } public void setX(Object x) { this.x = x; } public Object getY() { return y; } public void setY(Object y) { this.y = y; } } class PointA<T>{ private T x; private T y; public T getX() { return x; } public void setX(T x) { this.x = x; } public T getY() { return y; } public void setY(T y) { this.y = y; } }