知识库 知识库
首页
  • Hyperskill - Java

    • Java basic
    • Java OOP
    • 应知
    • 扩展
    • IO & Stream
    • Error & Exception
    • Algorithm & Data structure
    • Design pattern
    • Web
    • Spring boot
  • 练习题

    • 选择题 & 填空题
    • 代码题
  • Frank - Java与生活 (OOP)

    • 参考资料
    • Java基础
    • OOP上半部分
    • OOP下半部分
  • Frank - Java API进阶

    • Base API
    • Unit Test and main function
  • 学习笔记
  • 学习笔记

    • 数据库
  • Frank - MySQL删库跑路

    • 安装、连接、配置
    • 基本操作——数据库
    • 基本操作——表
    • 基本操作——数据
    • 数据类型
    • 列属性完整性
    • 数据库设计思维
    • 单表查询
    • 多表查询
  • 学习笔记

    • 其它
  • Frank - Linux现代方法

    • 必知
    • 命令
    • 技巧
  • 技术文档
  • Git
  • GitHub技巧
  • 前端
  • Khan Academy - 语法
  • Monthly
  • 阅读
  • Others
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 标签
  • 归档
GitHub (opens new window)

Jim FuckPPT

Java小学生
首页
  • Hyperskill - Java

    • Java basic
    • Java OOP
    • 应知
    • 扩展
    • IO & Stream
    • Error & Exception
    • Algorithm & Data structure
    • Design pattern
    • Web
    • Spring boot
  • 练习题

    • 选择题 & 填空题
    • 代码题
  • Frank - Java与生活 (OOP)

    • 参考资料
    • Java基础
    • OOP上半部分
    • OOP下半部分
  • Frank - Java API进阶

    • Base API
    • Unit Test and main function
  • 学习笔记
  • 学习笔记

    • 数据库
  • Frank - MySQL删库跑路

    • 安装、连接、配置
    • 基本操作——数据库
    • 基本操作——表
    • 基本操作——数据
    • 数据类型
    • 列属性完整性
    • 数据库设计思维
    • 单表查询
    • 多表查询
  • 学习笔记

    • 其它
  • Frank - Linux现代方法

    • 必知
    • 命令
    • 技巧
  • 技术文档
  • Git
  • GitHub技巧
  • 前端
  • Khan Academy - 语法
  • Monthly
  • 阅读
  • Others
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 标签
  • 归档
GitHub (opens new window)
  • 学习

  • 编程

    • 什么是编程语言?
    • 编程语言重要吗?
    • 废话Java泛型编程
      • 什么TMD叫泛型?
      • So, 什么是泛型编程
      • 在 Java 5 引入泛型之前怎么做的
      • Object VS Generic
      • Generic 可以不写 <T> ?
  • 面试

  • 心情杂货

  • 遭遇问题

  • 实用技巧

  • Interesting

  • 友情链接
  • Khan Academy - 算法

  • 更多
  • 编程
Jim
2022-09-29
目录

废话Java泛型编程

# 什么TMD叫泛型?

泛型泛型,把“泛”和“型”两个字展开来看不就得了吗。

  • 一个“泛”,指“广泛、泛化”
  • 一个“型”,指“数据类型”

连起来不就是“广泛的数据类型吗”?

# So, 什么是泛型编程

代码一样,但数据类型不同。让数据类型参数化,以重用相同的代码。

泛型类的类型参数只能是参考类型,也就是说,泛型只处理对象。(原始数据类型可用包装类代替)

这么说来,泛型编程并不是与面向对象对立的编程方法嘛。它是不是更像是面向对象编程的延展嘞。

泛型允许我们使用相同的类和方法来处理不同的类型:

class GenericType<T> { 

    private T t;

    public GenericType(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
GenericType<String> instance1 = new GenericType<>("abc");
String str = instance1.get();

GenericType<Integer> instance2 = new GenericType<>(100);
Integer num = instance2.get();
1
2
3
4
5

# 在 Java 5 引入泛型之前怎么做的

在 Java 5 引入泛型之前,使用Object类来做这件事儿。

class NonGenericType { 

    private Object object;

    public GenericType(Object object) {
        this.object = object;
    }

    public Objcet get() {
        return this.object;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
NonGenericType instance = new NonGenericType("I'm a object.");

String str = instance.get();  // Exception!

String str = (String) instance.get();  // Right. Must explicit type-casting
1
2
3
4
5

# Object VS Generic

# Generic 可以不写 <T> ?

这是可行的。即使它长得更像“Non-Generic”,但它仍然是泛型类。这种情况下,字段类型为Object。

GenericType instance = new GenericType("my-string");
1

上面的代码等同于下面的代码:

GenericType<Object> instance = new GenericType<>("abc"); // it is parameterized with Object
1

当然,通常是没有人这样用的。

编辑 (opens new window)
#技术
上次更新: 2022/12/03, 17:31:39
编程语言重要吗?
面试问题集锦

← 编程语言重要吗? 面试问题集锦→

最近更新
01
《挪威的森林》
04-14
02
青钢影
04-14
03
Processing strings
02-18
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Jim Frank | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式