代码之家  ›  专栏  ›  技术社区  ›  Sraw

如何指定一个同时匹配String和long的类型?

  •  4
  • Sraw  · 技术社区  · 7 年前

    情况是我有一个函数,它调用 Arrays.sort 对给定数组排序。作为 数组.排序 String[] array long[] array .

    Comparable[] ,不匹配 long[] . 我也试过改变 long Long . 但是装箱和拆箱的过程大大减慢了分拣速度。

    所以我想知道是否有一个类型我可以指定匹配他们两个?或者通常匹配所有支持的

    2 回复  |  直到 7 年前
        1
  •  3
  •   Zabuzard Louis-Philippe Lebouthillier    7 年前

    简单的回答是 ,你不能。

    Comparable 是一个接口,也是对象/类系统的一部分。原始的,如 long ,不是该系统的一部分,只是它的盒装变体 Long .

    Why don't Java Generics support primitive types? ).

    Project Valhalla short , int , 长的 byte char , float double boolean

    javaapi也必须做到这一点。你可以看到重载的 Arrays#sort 对于所有相关的原语和类的一个泛型重载。从它的 documentation

    sort​(byte[] a)
    sort​(char[] a)
    sort​(double[] a)
    sort​(float[] a)
    sort​(int[] a)
    sort​(long[] a)
    sort​(short[] a)
    sort​(Object[] a)
    sort​(T[] a, Comparator<? super T> c)
    
        2
  •  0
  •   prasad_    7 年前

    情况是我有一个函数,它调用 Arrays.sort 排序 给定数组。作为 数组.排序 String long ,我 想要使用一个签名而不是两个 String[] 数组和 long[] 数组。

    方法重载 这样地。

    public static void main(String [] args) {
        String [] strs = {"c", "x", "a", "d"};
        long [] ints = {4L, 343660L, 99L, 0L};
        Testing t = new Testing();
        t.sortMyArray(strs);
        t.sortMyArray(ints);
        System.out.println(Arrays.toString(strs)); // [a, c, d, x]
        System.out.println(Arrays.toString(ints)); // [0, 4, 99, 343660]
    }
    
    private void sortMyArray(long[] myArray) {
        Arrays.sort(myArray);
    }
    
    private void sortMyArray(String[] myArray) {
        Arrays.sort(myArray);
    }