写了一个Sort类,目的是能对所有基本类型数组和对象类型数组排序,构造方法为public Sort(Object[] obj),但这样int[]等基本类型的数组就不能传入,除了对基本类型数组一一构造外,有什么方法能够一次适用所有基本类型的数组吗?

解决方案 »

  1.   

    基本类型有对应的包装类,Java1.5之后有了“自动装箱”的功能:Integer i = 1;
      

  2.   

    但是我在外面声明一个数组,比如
    int[] a={1,2,3};
    Sort s=new Sort(a); //这就是错的想法就使能不能直接使a能够传入
      

  3.   

    可以使用泛型吧 写了个小例子
    public class Test<T> {
    void f(T[] ts) {
    System.out.println("f");
    }
    public static void main(String[] args){
    Character[] cs = {'a','b','c'};
    Integer[] is = {1,2,3};
    new Test<Character>().f(cs);
    new Test<Integer>().f(is);
    }
    }
      

  4.   

    但是这样还是不能直接传入基本类型的数组啊,你把你的Integer数组改成int的,也会报错啊
      

  5.   

    报错的原因就是基本类型数据数组是一个Object对象,而不是Object[],比如
    int[] arr = new int[5];
    Object obj = arr;//能通过编译
    Object[] objs = arr;//不能通过编译
    解决的办法就是把你的方法头改成这样
    public Sort(Object... obj)
    这个角什么来着,我忘记了,哦,叫可变参数。
    但是这样的话,不报错了,但是你传入的int[]是以一个对象的形式传入的,而非数组。
    在sort方法里遍历obj的话,只有第一个索引位置有值,就是int[]内存地址
    所以你还需要在方法内部处理一下。
      

  6.   

    你不会用Integer啊,用包装类呗
      

  7.   

    有内置的排序方法,可以对任意基本数据类型排序,对任意的对象数组排序,只要实现Comparable接口或具有相关联的Comparator  下面的例子生成随机的String对象…………public static void main(String[] args){
    String[] sa =Generated.array(new String[20],new RandomGenerator.String(5));
    print("Before sort :"  + Arrays.toString(sa));
    Arrays.sort(sa);
    print("After sort :"+Arrays.toString(sa));
    Arrays.sort(sa,Collection.reverseOrder());
    print("Reverse sort :"+Arrays.toString(sa));
    Arrays.sort(sa,String.CASE_INSENSITIVE_ORDER);
    print("Case-insensitive sort :"+Arrays.toString(sa));}