zoukankan      html  css  js  c++  java
  • Java之泛型浅析

    Java泛型在JDK1.5之后正式登场,主要解决了Java中强制类型转换带来的类型安全问题。简单的说泛型解决的是关于Java中数据类型的问题。

    以往要实现参数的任意化都是通过对类型Object(所有Java类的最高父类)的引用来实现,而这一操作就要求开发者对实际参数类型预知才能进行显示转换。否则在程序运行时将会出现各种类型上的错误。

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

    本质上来说Java的泛型就是一个用类型作为参数的类,格式class G<A,B>{   }

    其中A和B都是类型参数,一个泛型类中可以包含一个或多个类型参数声明,多个类型参数声明之间用逗号隔开。注意这里的类型参数必须是引用类型,而不能是基本数据类型。

    现在来看一看泛型的实现机制,这里要介绍一个概念叫“类型擦除”,Java泛型基本上都是在编译器这个层次来实现的,即在字节码中是不包含泛型中类型信息的。使用泛型的时候加上的类型参数,在编译器编译时会被去掉,这就叫类型擦除。因此在使用泛型的时候要注意定义List<Object>和List<String>等类型编译后都会变成List。同时也不能用泛型类型参数创建实例对象,如 E object=new E();当类型擦出之后泛型E是不可用的。

    使用泛型时可以制定一个具体的类型,也可以用通配符?来表示未知类型,通配符代表的其实是一组类型,但具体类型未知。通配符的使用形式有三种——?、?、extends T或者? super T,其中T为任意(引用)类型。

    在具体使用泛型是要注意:

    在static方法中不可以使用泛型,泛型变量也不可以使用static关键字来修饰。

    不要在泛型类中定义equals(T x)这类方法,因类型擦出后会与Object类中的equals方法冲突。

    根据同一个泛型类衍生出来的多个类之间没有任何关系不可以相互赋值。

    笔者经过一段时间的学习之后感觉还是有很多的细节比没有注意到,比如说泛型的协变性、泛型接口、泛型方法等等更深入的应用乃至用泛型实现设计模式等等更为有趣的内容还有待深入地学习与实践的体会总结。

  • 相关阅读:
    03 重定向,请求转发,cookie,session
    02 http,servlet,servletconfig,HttpServletRequest ,HttpServletResponse
    02 JDBC相关
    01 mysql
    16 反射,枚举,新特性
    13 递归练习
    12 IO流
    11 异常
    兼容当前五大浏览器的渐变颜色背景gradient的写法
    Electron Browser加载iframe(webview src属性)
  • 原文地址:https://www.cnblogs.com/skylife/p/8023566.html
Copyright © 2011-2022 走看看