博客
关于我
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 自增id和UUID做主键性能分析,及最优方案
查看>>
Mysql 自定义函数
查看>>
mysql 行转列 列转行
查看>>
Mysql 表分区
查看>>
mysql 表的操作
查看>>
mysql 视图,视图更新删除
查看>>
MySQL 触发器
查看>>
mysql 让所有IP访问数据库
查看>>
mysql 记录的增删改查
查看>>
MySQL 设置数据库的隔离级别
查看>>
MySQL 证明为什么用limit时,offset很大会影响性能
查看>>
Mysql 语句操作索引SQL语句
查看>>
MySQL 误操作后数据恢复(update,delete忘加where条件)
查看>>
MySQL 调优/优化的 101 个建议!
查看>>
mysql 转义字符用法_MySql 转义字符的使用说明
查看>>
mysql 输入密码秒退
查看>>
mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
查看>>
mysql 通过查看mysql 配置参数、状态来优化你的mysql
查看>>