java 变长参数,泛型相关问题
工作中遇到的问题,是使用scala的array,使用java的Arrays.asList方法转换时,得到了意想不到的结果,因此查阅了很多资料对这个问题做以下总结,涉及到java中的泛型,可变参数,数组等。
说到变长参数,必须要提到数组,数组到底是什么呢?是对象么?
数组是对象,但是这个数组对象并不是从某个类实例化来的,而是由JVM直接创建的,因此查看类名的时候会发现是很奇怪的类似于”[I”这样的样子,这个直接创建的对象的父类就是Object,所以可以调用Object中的所有方法,更多可以参考文献1.
例如:
public static void main(String[] args) {
String[] a={"a","b"};
int[] b={1,2,3};
Integer[] c={1,2,3};
System.out.println(a.getClass().getName());
System.out.println(b.getClass().getName());
System.out.println(c.getClass().getName());
System.out.println(a instanceof Object);
System.out.println(a.getClass().getSuperclass().getName());
}
#output
[Ljava.lang.String;
[I
[Ljava.lang.Integer;
true
java.lang.Object
从上边可以看出数组的class name都是[命名的,并且要注意基本数据类型与java类的区别。再看一下代码
public class Test<T> {
public static void main(String[] args) {
String[] a={"a","b","c"};
int[] b={1,2,3};
Integer[] c={1,2,3};
Test t=new Test();
t.test1(a);
t.test1(b);
t.test1(c);
}
public void test1(T... strings){
System.