• 一个简单的泛型类


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

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

  • 相关阅读:
    这是什么代码帮我看看
    赔腾讯70万,QQ“自动抢红包”软件被判不正当竞争
    NFT Marketplace 比较 | 快速指南
    还不会JVM监控告警?一篇文章教会你!
    Linux修改fs.inotify.max_user_watches(“外部文件更改同步可能很慢”和“当前的 inotify(7) 监视限制太低”)
    AES和SM4各有什么特点?有什么不同之处?
    用原生JS实现虚表控件
    Java微服务监控及与普罗米修斯集成
    Android managed configurations(设置受管理的配置)
    MySQL、Redis 和 Zookeeper 实现分布式锁方法及优缺点
  • 原文地址:https://blog.csdn.net/yangfengling1023/article/details/125898895