15.7.4 边界处的动作

本文探讨了在Java中使用泛型创建数组的具体方法,以及如何解决由泛型带来的类型不确定问题。通过实例演示了Array.newInstance方法的使用,并解释了为何需要进行类型强制转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 编译器无法确定泛型的实际类型,但可以保证在使用泛型时的一致性;
package chapter15._7._4;

import java.lang.reflect.Array;
import java.util.Arrays;

public class ArrayMaker<T> {

    private Class<T> kind;

    public ArrayMaker(Class<T> kind) {
        this.kind = kind;
    }

    T[] create(int size) {
        /**
         * 这里如果不强转的话会报错,编译期kind的类型是Object,
         * 故Array.newInstance(kind, size)创建的是Object[],
         * 而方法的返回类型是T[];
         */
        return (T[])Array.newInstance(kind, size);
    }

    public static void main(String[] args) {
        ArrayMaker<String> stringMaker = new ArrayMaker(String.class);
        String[] stringArray = stringMaker.create(9);
        System.out.println(Arrays.toString(stringArray));
    }

}
package chapter15._7._4;

import java.util.ArrayList;
import java.util.List;

public class ListMaker<T> {

    // 这里 new ArrayList<T>() 中的T不能少,否则会有警告;
    List<T> create() {
        return new ArrayList<T>();
    }

    public static void main(String[] args) {
        ListMaker<String> stringMaker = new ListMaker<String>();
        List<String> stringList = stringMaker.create();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值