java programming-泛型

本文介绍了Java泛型如何避免ClassCastException,通过实例展示了泛型在处理不同类型数据时的优势,以及在编译时检查类型安全性的特点。后续将探讨泛型通配符及其解决方案。
摘要由CSDN通过智能技术生成

泛型

摘要

泛型是JDK1.5版本后出现的新技术特性,利用泛型的特性可以方便地避免对象强制转型所带来的安全隐患问题(ClassCastException)。

为何这样说,有什么问题?

下面我将给出具体实例来说明问题。

下面通过模拟记录地址的经纬度,来演示。

记录经纬度的”实体类“

/**
 * 记录坐标经纬度
 * 用于测试Object转型的安全问题
 */
public 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;
    }
}

来看这段代码

案例1:

  /**
         * 案例1
         */
        Point pointNormal = new Point();
        pointNormal.setX(1);
        pointNormal.setY(2);
        int x = (Integer)pointNormal.getX();
		int y = (Integer)pointNormal.getY();
        /**
         *这里打印一下对应的值
         */
        System.out.println("X:"+x+"\nY:"+y);

案例2:

/**
 * 案例2
 */
Point pointException = new Point();
pointException.setX(1);
pointException.setY("北纬2度");

int x = (Integer)pointNormal.getX();
int y = (Integer)pointNormal.getY();

/**  * 问题出现了,转换类型报错ClassCastException  */    System.out.println("X:"+x+"\nY:"+y); 
   具体报错内容:![类型转换异常(ClassCastException)](https://img-blog.csdnimg.cn/direct/f28f8820bf4844c1a759b056cb708a8c.png#pic_center)

泛型快速入门

那么该如何解决,“泛型”就登场了

替换为泛型的”实体类“

 	public class GE_Point<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;
    }

}

指定泛型为Integer

GE_Point<Integer> gePoint = new GE_Point<>();
gePoint.setX(1);
gePoint.setY("北纬2度");
/**
 * 实例化对象时,类型已经被声明了
 * 由于泛型再声明对象的时候已经指定了类型,
 * 所以这里就不用继续转换类型,也不会报错
 */
System.out.println("X:"+pointNormal.getX()+"\nY:"+pointNormal.getY());

但是这里在编译时就已经报错了

编译时异常

idea检查报错

报错信息:‘one.entity.GE_Point’ 中的 ‘setY(java.lang.Integer)’ 无法应用于 ‘(java.lang.String)’

总结

所以不难看出,泛型避免了强制类型转换而带来的“类型转换异常”,同时如果已经声明了类型,然后再赋值时赋予与其不一样的类型值的时候仅在编译时就会报错,提升了代码的“安全性”。

说在最后

其实泛型也存在一些问题以及一些解决方案,这就涉及到泛型通配符的知识,我将尽快发布后面的内容,谢谢各位看客老爷赏脸。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值