博客
关于我
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/

你可能感兴趣的文章
mysql 主从关系切换
查看>>
MYSQL 主从同步文档的大坑
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
Mysql 事务知识点与优化建议
查看>>
Mysql 优化 or
查看>>
mysql 优化器 key_mysql – 选择*和查询优化器
查看>>
MySQL 优化:Explain 执行计划详解
查看>>
Mysql 会导致锁表的语法
查看>>
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页
查看>>
Mysql 分页语句 Limit原理
查看>>
MySql 创建函数 Error Code : 1418
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>