zoukankan      html  css  js  c++  java
  • Java 限定传入的两个泛型参数的类型相同

    Java 限定传入的两个泛型参数的类型相同

    定义一个泛型方法,同时限制传入的两个泛型参数的类型要相同,整理了一下思路。

    1、定义泛型方法

    Java 定义泛型方法的格式大致如下:

    /**
    * 泛型方法
    * @param a 泛型参数a
    * @param b 泛型参数b
    * @param <T> 声明此方法持有一个类型T,也可以理解为声明此方法为泛型方法
    * @return 此方法的返回值为类型T
    */
    public static <T> T test(T a, T b) {
        return a;
    }
    

    现在要限定泛型参数 a 与 泛型参数 b 传入的类型相同,怎么办呢?

    2、超类型限定

    既然要限定泛型参数 a 与 b 的类型相同,那么可不可以让 b 作为 a 的子类去实现类型限定呢?

    思路如下

    1、声明 参数 a 的类型,直接让 a 继承泛型 T就可以了。

    //声明参数a的类型为S,S继承于T
    public static <T, S extends T> T test(S a, T b) {
        return a;
    }
    

    2、声明参数 b 的类型, 继承 Comparable<a>的类型。 Comparable 是一个泛型接口,实现类必须都重写 compareTo() 方法,因此可以用来限定 b 的类型只能是 a 的 类型,即超类型限定(如果参数只是包装类,到这里就可以了)

    public static void main(String[] args) {
        //包装类、当两个参数的类型不同,直接报错
        test(1, 2);
    }
    
    public static <T, S extends T, W extends Comparable<S>> T test(S a, W b) {
        return a;
    }
    

    3、传入的是实体类型参数,必须重写 compareTo() 方法 ,因为上文的包装类都默认实现了 compareTo() 方法

    如 User 实体类:

    image-20210528165526691

    public static void main(String[] args) {
        //实体类型,必须重写compareTo()方法
        User user1 = new User();
        User user2 = new User();
        test(user1, user2);
    }
    
    public static <T, S extends T, W extends Comparable<S>> T test(S a, W b) {
        return a;
    }
    

    到这里,就限定了传入的两个泛型参数的类型必须一致,否则报错。

    自我控制是最强者的本能-萧伯纳
  • 相关阅读:
    【转】算命称骨
    为WinForms程序添加Form级快捷键的最简单方式
    Flex4中Datagrid垂直滚动使combobox&dropdownlist数据消失(已解决)
    Flex & form小技巧
    [转]Android开发之旅:环境搭建及HelloWorld
    [SQL2005]安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法
    [转]Flex 中的皮肤
    天哪,Flex有没有阻塞方式啊?
    [资料库]Flash特效站点(带源码)
    开始学习JAVA
  • 原文地址:https://www.cnblogs.com/CF1314/p/14823041.html
Copyright © 2011-2022 走看看