• 一个简单的泛型类


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

    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编程的逻辑》,感兴趣的可以看原书籍

  • 相关阅读:
    966SEO扫地僧站群·万能HTML模板[V1.9.1]
    KT148A语音芯片使用串口uart本控制的完整说明_包含硬件和指令举例
    uiautomator2遍历子元素.all()
    面试高频手撕算法 - 背包问题2
    Vue3.0——Vue3简介、Vue3带来了什么、拥抱TypeScript、新的特性、Vue3.0环境集成
    MySQL-MHA高可用
    [Git] 系列二高级命令学习记录
    你不知道的自然语言处理应用场景和挑战
    JavaScript快速入门
    mysql45讲记录
  • 原文地址:https://blog.csdn.net/yangfengling1023/article/details/125898895