15.7.4 边界处的动作

  • 编译器无法确定泛型的实际类型,但可以保证在使用泛型时的一致性;
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();
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,009评论 2 89
  • 136.泛型 泛型代码让你可以写出灵活,可重用的函数和类型,它们可以使用任何类型,受你定义的需求的约束。你可以写出...
    无沣阅读 1,498评论 0 4
  • 泛型: 本内容均属原创,一个字一个字敲的,如果要转载请注明出处:https://www.jianshu.com/p...
    坑王老薛阅读 1,415评论 0 9
  • 我是一个普通的大学生,关于生活费,‘可怜天下父母心’ ‘爸妈赚钱就该给我们花啊,不然挣那么多钱干什么?’ ‘假如我...
    99nian阅读 335评论 0 1
  • 没有午睡的晚上,好像世界变慢了,我不再盯着手机翻阅而是拿出书本阅读。一字一句,不紧不慢的读着。看到哪里都是欢喜,下...
    一只小蛮妖阅读 146评论 0 0