泛型带你规避风险 | 带你学《Java面向对象编程》之六十四

简介: 本节由转型风险引出了一个新的概念-泛型,并为读者简单介绍了泛型的定义方法与泛型类实例化方法。

上一篇:危险的转型操作 | 带你学《Java面向对象编程》之六十三
【本节目标】
通过阅读本节内容,你将接触到泛型的概念,了解其规避转型风险的原理,学会定义一个简单的泛型类并能够正确地实例化泛型类。

泛型定义

如果要想避免项目之中出现“ClassCastException”最好的做法是可以直接回避掉对象的强制转换,所以在JDK1.5之后提供有泛型技术,而泛型的本质在于,类中的属性或方法的参数与返回值的类型可以由对象实例化的时候动态决定。
那么此时就需要在类定义的时候明确定义占位符(泛型标记)。

class Point <T> {    //T是Type的简写,可以定义多个泛型
    private T x ;
    private T y ;
    public void setX(T x) {
        this.x = x ;    
    }
    public void setY(T y) {
        this.y = y ;
    }
    public T getX() {
        return this.x ;
    }
    public T getY() {
        return this.y ;
    }
}
public class JavaDemo {
    public static void main(String args[]) {
        Point point = new Point() ;
    //第一步:根据需求进行内容的设置
        point.setX(10) ;    //自动装箱
        point.setY(“北纬20度”) ;    //自动装箱
    //第二步:从里面获取数据
        int x = (Integer) point.getX() ;
        int y = (Integer) point.getY() ;
        System.out.println(“x坐标:” + x + “、y坐标:” + y) ;
    }  
}

此时Point中的x与y属性的数据类型并不确定,而是由外部来决定。

提示:关于默认的泛型类型

  • 由于泛型是属于JDK1.5之后的产物,但是在这之前已经有不少程序类或者接口广泛的应用在项目开发之中,于是为了保证这些类或接口追加了泛型之后,原始的程序类依然可以使用,所以如果不设置泛型类型时,自动将使用Object作为类型,以保证程序的正常执行,但是在编译的过程之中会出现警告信息。

泛型定义完成后可以在实例化对象的时候进行泛型类型的设置,一旦设置之后,里面的x与y的属性的类型就与当前对象直接绑定了。

class Point <T> {    //T是Type的简写,可以定义多个泛型
    private T x ;
    private T y ;
    public void setX(Integer x) {
        this.x = x ;    
    }
    public void setY(Integer y) {
        this.y = y ;
    }
    public T getX() {
        return this.x ;
    }
    public T getY() {
        return this.y ;
    }
}
public class JavaDemo {
    public static void main(String args[]) {
        Point<Integer> point = new Point<Integer>() ;
    //第一步:根据需求进行内容的设置
        point.setX(10) ;    //自动装箱
        point.setY(20) ;    //自动装箱
    //第二步:从里面获取数据
        int x = point.getX() ;
        int y = point.getY() ;
        System.out.println(“x坐标:” + x + “、y坐标:” + y) ;
    }     //执行结果:x坐标:10、y坐标:20
}

现在的程序代码之中,由于Point类里面设置的泛型类型为Integer,这样所有的对应此泛型的属性、变量、方法返回值全部替换为Integer(只局限于此对象之中),这样在进行处理的时候如果发现设置的内容有错误,则会在程序编译的时候自动进行错误提示,同时也避免了对象的向下转型处理(可以避免安全隐患)。

Point<String> pointB = new Point<String>() ;

泛型的使用注意点:

  • 泛型之中只允许设置引用类型,如果现在要操作基本类型必须使用包装类;

从JDK1.7开始,泛型对象实例化可以简化为“Point point = new Point<>()”;
使用泛型可以解决大部分的类对象的强制转换处理,这样的程序才是一个合理的设计。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:泛型类传参小助手-泛型通配符 | 带你学《Java面向对象编程》之六十五
更多Java面向对象编程文章查看此处

相关文章
|
24天前
|
Java API
[Java]泛型
本文详细介绍了Java泛型的相关概念和使用方法,包括类型判断、继承泛型类或实现泛型接口、泛型通配符、泛型方法、泛型上下边界、静态方法中使用泛型等内容。作者通过多个示例和测试代码,深入浅出地解释了泛型的原理和应用场景,帮助读者更好地理解和掌握Java泛型的使用技巧。文章还探讨了一些常见的疑惑和误区,如泛型擦除和基本数据类型数组的使用限制。最后,作者强调了泛型在实际开发中的重要性和应用价值。
19 0
[Java]泛型
|
1月前
|
存储 安全 Java
🌱Java零基础 - 泛型详解
【10月更文挑战第7天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
11 1
|
1月前
|
Java 语音技术 容器
java数据结构泛型
java数据结构泛型
27 5
|
1月前
|
存储 Java 编译器
Java集合定义其泛型
Java集合定义其泛型
18 1
|
1月前
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
20 2
|
1月前
|
安全 Java 编译器
Java基础-泛型机制
Java基础-泛型机制
16 0
|
1月前
|
Java
【Java】什么是泛型?什么是包装类
【Java】什么是泛型?什么是包装类
18 0
|
5月前
|
Java API 容器
Java泛型的继承和通配符
Java泛型的继承和通配符
35 1
|
6月前
|
安全 Java API
Java一分钟之-泛型通配符:上限与下限野蛮类型
【5月更文挑战第19天】Java中的泛型通配符用于增强方法参数和变量的灵活性。通配符上限`? extends T`允许读取`T`或其子类型的列表,而通配符下限`? super T`允许向`T`或其父类型的列表写入。野蛮类型不指定泛型,可能引发运行时异常。注意,不能创建泛型通配符实例,也无法同时指定上下限。理解和适度使用这些概念能提升代码的通用性和安全性,但也需兼顾可读性。
65 3
|
6月前
|
Java 编译器
[java进阶]——泛型类、泛型方法、泛型接口、泛型的通配符
[java进阶]——泛型类、泛型方法、泛型接口、泛型的通配符