Java泛型(一) 泛型的概念 基础

来源:互联网 发布:google浏览器 for mac 编辑:程序博客网 时间:2024/05/01 10:02

     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;    }}


0 0
原创粉丝点击