美文网首页
《Oracle Java SE编程指南》20-02:泛型的概念

《Oracle Java SE编程指南》20-02:泛型的概念

作者: AT阿宝哥 | 来源:发表于2020-05-02 11:12 被阅读0次
课程封面-JavaSE-AT阿宝哥

内容导航

  • 前言
  • 1、定义
  • 2、泛型什么样子
  • 3、泛型的作用

前言

JDK1.5以后,添加了对泛型的支持,主要应用在集合框架。

本节先学习泛型,为后续学习集合做好准备。


1、定义

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

Java语言引入泛型的好处是安全简单。


2、泛型什么样子

  • Class ArrayList<E>
    声明一个泛型类ArrayList,其中E可以使用任意一个具体类型替代,泛型类型往往使用一个大写字母表示。

  • public boolean add(E o)
    E是泛型,也就是说,使用add方法时,可以为其传递任意一种类型的参数。其中此处的E是在类中定义的。


3、示例代码

示例代码:


package com.company.project.demo020301;

//类:泛型类
public class GenericType<T> {
    //属性
    private T x;
    

    @SuppressWarnings("unchecked")
    public GenericType() {
        super();
        this.x = null;
        this.x = (T) new Object() ;
    }

    public GenericType(T x) {
        super();
        this.x = x;
    }
    
    public T getX() {
        return x;
    }

    public void setX(T x) {
        this.x = x;
    }

}

示例代码:


package com.company.project.demo020301;

import java.util.Date;

public class Client {

    public static void main(String[] args) {
        // 调用泛型类的无参构造方法
        GenericType<Object> objectFoo1 = new GenericType<Object>();

        // 调用泛型类的有参构造方法
        GenericType<String> stringFoo = new GenericType<String>(new String("Hello Generics!"));
        GenericType<Double> doubleFoo = new GenericType<Double>(new Double("99.00"));
        GenericType<Object> objectFoo2 = new GenericType<Object>(new Object()); 
        GenericType<Date> dateFoo = new GenericType<Date>( new Date());
        

        System.out.println("objectFoo1.getX() :" + objectFoo1.getX());
        System.out.println("stringFoo.getX() :" + stringFoo.getX());
        System.out.println("doubleFoo.getX() :" + doubleFoo.getX());
        System.out.println("objectFoo.getX() :" + objectFoo2.getX());
        System.out.println("dateFoo.getX() :" + dateFoo.getX());
        
        System.out.println("objectFoo1.getClass() :" + objectFoo1.getClass());
        System.out.println("stringFoo.getClass() :" + stringFoo.getClass());
        System.out.println("doubleFoo.getClass() :" + doubleFoo.getClass());
        System.out.println("objectFoo.getClass() :" + objectFoo2.getClass());
        System.out.println("dateFoo.getClass() :" + dateFoo.getClass());

    }

}

运行结果:


objectFoo1.getX() :java.lang.Object@7852e922
stringFoo.getX() :Hello Generics!
doubleFoo.getX() :99.0
objectFoo.getX() :java.lang.Object@4e25154f
dateFoo.getX() :Mon Jun 01 17:11:57 CST 2020
objectFoo1.getClass() :class com.company.project.demo01.now.GenericType
stringFoo.getClass() :class com.company.project.demo01.now.GenericType
doubleFoo.getClass() :class com.company.project.demo01.now.GenericType
objectFoo.getClass() :class com.company.project.demo01.now.GenericType
dateFoo.getClass() :class com.company.project.demo01.now.GenericType



4、泛型的作用

Java中泛型的作用:简单安全。

在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

消除代码中的强制类型转换,同时获得一个附加的类型检查层,该检查层可以防止有人将错误类型的值保存在集合中。

在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。


持续更新,欢迎留言提议!
码字很累,多点赞多赞赏!


扫描二维码,关注AT阿宝哥

相关文章

网友评论

      本文标题:《Oracle Java SE编程指南》20-02:泛型的概念

      本文链接:https://www.haomeiwen.com/subject/zqfkghtx.html