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

本文深入介绍了Java泛型的概念,解释了为何引入泛型及其带来的好处,并通过实例展示了泛型的具体应用,包括泛型类和方法的定义及使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值