求助:关于数组类型参数的问题 写了一个Sort类,目的是能对所有基本类型数组和对象类型数组排序,构造方法为public Sort(Object[] obj),但这样int[]等基本类型的数组就不能传入,除了对基本类型数组一一构造外,有什么方法能够一次适用所有基本类型的数组吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 基本类型有对应的包装类,Java1.5之后有了“自动装箱”的功能:Integer i = 1; 但是我在外面声明一个数组,比如int[] a={1,2,3};Sort s=new Sort(a); //这就是错的想法就使能不能直接使a能够传入 可以使用泛型吧 写了个小例子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); }} 但是这样还是不能直接传入基本类型的数组啊,你把你的Integer数组改成int的,也会报错啊 报错的原因就是基本类型数据数组是一个Object对象,而不是Object[],比如int[] arr = new int[5];Object obj = arr;//能通过编译Object[] objs = arr;//不能通过编译解决的办法就是把你的方法头改成这样public Sort(Object... obj)这个角什么来着,我忘记了,哦,叫可变参数。但是这样的话,不报错了,但是你传入的int[]是以一个对象的形式传入的,而非数组。在sort方法里遍历obj的话,只有第一个索引位置有值,就是int[]内存地址所以你还需要在方法内部处理一下。 你不会用Integer啊,用包装类呗 有内置的排序方法,可以对任意基本数据类型排序,对任意的对象数组排序,只要实现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));} 怎么想都想不明白。明明按视频教程里写的是死锁,怎么还能循环呢? Java程序发声 java 在背景上添加组件 高分相赠,急!!!!!!!!!!!!!! 如何学好java 紧急求助:为什么下面这段代码无法选定文本区内的内容? 如何用正则表达式在139123213123中找出13? 日期判断 请问大家:JAVA中怎样使窗口始终都在最上面?急 请问,能设置Choice的长度,和宽度吗? java socket编程关于client和server连接问题! 求牛人发个C#或者Java做的编译原理词法分析器源程序
int[] a={1,2,3};
Sort s=new Sort(a); //这就是错的想法就使能不能直接使a能够传入
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);
}
}
int[] arr = new int[5];
Object obj = arr;//能通过编译
Object[] objs = arr;//不能通过编译
解决的办法就是把你的方法头改成这样
public Sort(Object... obj)
这个角什么来着,我忘记了,哦,叫可变参数。
但是这样的话,不报错了,但是你传入的int[]是以一个对象的形式传入的,而非数组。
在sort方法里遍历obj的话,只有第一个索引位置有值,就是int[]内存地址
所以你还需要在方法内部处理一下。
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));}