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

你可能感兴趣的文章
Oracle 11g数据库安装和卸载教程
查看>>
Oracle 11g数据库成功安装创建详细步骤
查看>>
Oracle 11g超详细安装步骤
查看>>
Oracle 12c中的MGMTDB
查看>>
Oracle 12c安装报错Installation failed to access the temporary location(无法访问临时位置)...
查看>>
Oracle 9i数据库管理教程
查看>>
ORACLE Active dataguard 一个latch: row cache objects BUG
查看>>
oracle avg、count、max、min、sum、having、any、all、nvl的用法
查看>>
Oracle BEQ方式连接配置
查看>>
oracle Blob保存方式,oracle 存储过程操作blob
查看>>
Oracle BMW Racing sailing vessel帆船图
查看>>
ORACLE Bug 4431215 引发的血案—原因分析篇
查看>>
Oracle Business Intelligence Downloads
查看>>
Oracle cmd乱码
查看>>
Oracle Corp甲骨文公司推出Oracle NoSQL数据库2.0版
查看>>
【Docker知识】将环境变量传递到容器
查看>>
uniapp超全user-agent判断 包括微信开发工具 hbuilder mac windows 安卓ios端及本地识别
查看>>
Oracle DBA课程系列笔记(20)
查看>>
oracle dblink 创建使用 垮库转移数据
查看>>
oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
查看>>