博客
关于我
Java泛型总结
阅读量:776 次
发布时间:2019-03-24

本文共 2299 字,大约阅读时间需要 7 分钟。

1. 概念解释

泛型类是Java语言中为解决向下转型安全问题而引入的一种概念。与传统类不同,泛型类在定义时并不指定特定的类型,而是在使用时指定具体类型。这种灵活性使得代码更加可维护和可扩展。

基本语法

class MyClass
{ T value; // T代表任意引用类型,可以是Object及其子类}

常见类型参数

  • T:代表任意引用类型
  • E:元素类型
  • K, V:键值对类型

作用

  • 检测编译期错误:确保传入的参数类型与定义时一致
  • 杜绝向下转型隐患:避免运行时fromJson(null)造成的问题

2. 泛型方法

泛型方法是泛型类的扩展,方法可以带有类型参数。

语法

public
T test(T t) { return t;}
  • 第一个
    :方法的类型参数,不能省略
  • 第二个T:返回值类型
  • 第三个T:方法参数类型

与泛型类共存

  • 如果一个泛型类与泛型方法共存,
    指的是不同的类型参数
  • 建议使用不同的
    标识以避免混淆

应用场景

public class Point
{ 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; } @Override public String toString() { return "Point [x=" + x + ", y=" + y + "]"; }}public class Test { public static void main(String[] args) { Point
point = new Point<>(); point.setX("qwe"); point.setY("asd"); System.out.println(point); Point
point2 = new Point<>(); // JDK 1.7以后可以省略类型 point2.setX(12); point2.setY(23); System.out.println(point2); }}

3. 通配符

通配符用于接收任意类型的泛型,并可以设置泛型的上下界。

? 用法

  • ? 用于方法参数,表示只能接受特定类型或任意类型的对象,但无法对其进行修改
  • extend 用于设置泛型上界,表示只能接收该界限及其子类
  • super 用于设置泛型下界,表示只能接收该界限及其父类

示例

public class MyClass
{ private T value; public MyClass(T value) { super(); this.value = value; } public T getValue() { return value; } public void setValue(T value) { this.value = value; }}public class Test1 { public static void main(String[] args) { fun(new MyClass
(10)); fun(new MyClass
("qwe")); MyClass
myClass = new MyClass<>("123"); MyClass
object = new MyClass<>("123"); fun(object); fun(new MyClass
(10.2)); fun(new MyClass
("hello")); }}public static void fun(MyClass
myClass) { System.out.println(myClass.getValue());}

4. 泛型接口

泛型接口与普通接口不同,支持在接口中定义类型参数。

定义

interface MyClass
{ ... }

实现类

  • 继续使用泛型
  • 具体类型可有或无

示例

class MyClassImpl implements MyClass
{ // 与普通类一样定义方法}

5. 泛型擦除

泛型是在编译阶段转换为具体类,由JVM处理。因此,泛型在运行时会被擦除。

示例

class MyClass
{ T value;}MyClass
my = new MyClass<>();

在JVM中,同时存在MyClass和Object类的实例,但参数信息已被擦除。

转载地址:http://ydlkk.baihongyu.com/

你可能感兴趣的文章
nginx一些重要配置说明
查看>>
Nginx下配置codeigniter框架方法
查看>>
Nginx与Tengine安装和使用以及配置健康节点检测
查看>>
Nginx中使用expires指令实现配置浏览器缓存
查看>>
Nginx中实现流量控制(限制给定时间内HTTP请求的数量)示例
查看>>
nginx中配置root和alias的区别
查看>>
nginx主要流程(未完成)
查看>>
Nginx之二:nginx.conf简单配置(参数详解)
查看>>
Nginx从入门到精通
查看>>
Nginx代理websocket配置(解决websocket异常断开连接tcp连接不断问题)
查看>>
Nginx代理初探
查看>>
nginx代理地图服务--离线部署地图服务(地图数据篇.4)
查看>>
Nginx代理外网映射
查看>>
Nginx代理模式下 log-format 获取客户端真实IP
查看>>
Nginx代理解决跨域问题(导致图片只能预览不能下载)
查看>>
Nginx代理访问提示ERR_CONTENT_LENGTH_MISMATCH
查看>>
Nginx代理配置详解
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
nginx优化日志拒绝特定404请求写入
查看>>