java 变长参数,泛型相关问题

博客探讨了Java中变长参数和泛型在处理数组时出现的问题,特别是涉及基本类型和对象类型数组的不同行为。文章指出,当传入基本数据类型数组时,由于泛型不支持基本类型,会丢失原始类型信息,导致需要强制类型转换。同时,Scala数组在转换时也会遇到类似问题,因Java泛型不支持Scala类。文中还提到了`Arrays.asList`方法的使用陷阱,并纠正了之前关于类型丢失的误解。
摘要由CSDN通过智能技术生成

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值