• 一个简单的泛型类


            泛型将接口的概念进一步延伸,“泛型”的字面意思就是广泛的类型。

    1、基本概念

            直接看代码:

    1. public class Pair {
    2. T first;
    3. T second;
    4. public Pair(T first, T second) {
    5. this.first = first;
    6. this.second = second;
    7. }
    8. public T getFirst() {
    9. return first;
    10. }
    11. public T getSecond() {
    12. return second;
    13. }
    14. }

            Pair就是一个泛型类,与普通类的区别体现在:

            1)类名后面多了一个

            2)first和second的类型都是T。

            T表示类型参数,泛型就是类型参数化,处理的数据类型不是固定的,而是可以作为参数传入。

            下面代码是用这个泛型类,并传递类型参数:

    1. PairV1 minMax = new PairV1(1, 100);
    2. Integer min = minMax.getFirst();
    3. Integer max = minMax.getSecond();
    4. PairV1 kv = new PairV1("name", "java");
    5. String key = kv.getFirst();
    6. String value = kv.getSecond();

            类型参数可以有多个,Pair类中的first和second可以是不同的类型,多个类型之间以逗号分隔,来看改进后的Pair类定义:

    1. public class PairV2 {
    2. U first;
    3. V second;
    4. public PairV2(U first, V second) {
    5. this.first = first;
    6. this.second = second;
    7. }
    8. public U getFirst() {
    9. return first;
    10. }
    11. public V getSecond() {
    12. return second;
    13. }
    14. public static void main(String[] args) {
    15. PairV2 minMax1 = new PairV2("name", 100);
    16. PairV2 minMax = new PairV2<>("name", 100);
    17. String min = minMax.getFirst();
    18. Integer max = minMax.getSecond();
    19. System.out.println(min);
    20. System.out.println(max);
    21. List a = new ArrayList<>();
    22. }
    23. }

    2、基本原理

            泛型的内部原理其实就是直接使用Object定义普通类。

    1. public class PairV3 {
    2. Object first;
    3. Object second;
    4. public PairV3(Object first, Object second) {
    5. this.first = first;
    6. this.second = second;
    7. }
    8. public Object getFirst() {
    9. return first;
    10. }
    11. public Object getSecond() {
    12. return second;
    13. }
    14. public static void main(String[] args) {
    15. PairV3 minMax = new PairV3(1, 100);
    16. Integer min = (Integer) minMax.getFirst();
    17. Integer max = (Integer) minMax.getSecond();
    18. System.out.println(min); // 1
    19. System.out.println(max); //100
    20. PairV3 kv = new PairV3("name", "java");
    21. String key = (String) kv.getFirst();
    22. String value = (String) kv.getSecond();
    23. System.out.println(key); // name
    24. System.out.println(value); // java
    25. }
    26. }

            对于泛型类,Java编译器会将泛型代码转换为普通的非泛型代码,就像上面的普通Pair类代码及其使用代码一样,将类型参数T擦除,替换为Object,插入必要的强制类型转换。Java虚拟机实际执行的时候,它是不知道泛型这回事的,只知道普通的类及代码。

    3、范型的好处

            1)更好的安全性

            2)更好的可读性

    注:

            以上内容来源于《Java编程的逻辑》,感兴趣的可以看原书籍

  • 相关阅读:
    24 mysql all 查询
    【五一创作】使用Scala二次开发Spark3.3.0实现对MySQL的upsert操作
    分页查询实体和分页响应实体的使用
    MALUNet:一种多关注,轻量级的皮肤病变分割UNet
    算法通关村第二关终于学会链表反转了
    JDK1.8新特性---Optional
    我与梅西粉丝们的世界杯观球日常
    【react】什么是fiber?fiber解决了什么问题?从源码角度深入了解fiber运行机制与diff执行
    [C++]C++类和对象(中)---下篇、
    (imdb数据集)电影评论分类实战:二分类问题
  • 原文地址:https://blog.csdn.net/yangfengling1023/article/details/125898895