博客
关于我
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 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>
MySQL 导出数据
查看>>
mysql 将null转代为0
查看>>
mysql 常用
查看>>
MySQL 常用列类型
查看>>
mysql 常用命令
查看>>
Mysql 常见ALTER TABLE操作
查看>>
MySQL 常见的 9 种优化方法
查看>>
MySQL 常见的开放性问题
查看>>
Mysql 常见错误
查看>>
mysql 常见问题
查看>>
MYSQL 幻读(Phantom Problem)不可重复读
查看>>
mysql 往字段后面加字符串
查看>>
mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
查看>>
MySQL 快速创建千万级测试数据
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
MySql 手动执行主从备份
查看>>
Mysql 批量修改四种方式效率对比(一)
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>