文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中怎么创建一个泛型数组

2023-06-17 11:02

关注

本篇文章给大家分享的是有关Java中怎么创建一个泛型数组,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在java中,不能通过直接通过T[] tarr=new T[10]的方式来创建数组,最简单的方式便是通过Array.newInstance(Class<t>type,int size)的方式来创建数组例如下面的程序。

public class ArrayMaker<T> {        private Class<T> type;            public ArrayMaker(Class<T> type) {            this.type = type;        }            @SuppressWarnings("unchecked")        T[] createArray(int size) {            return (T[]) Array.newInstance(type, size);        }            List<T> createList() {            return new ArrayList<T>();        }                    public static void main(String[] args) {                        ArrayMaker<Type> am2 = new ArrayMaker<Type>(Type.class);            System.out.println(Arrays.asList(am2.createArray(10)));            System.out.println(Arrays.asList(am2.createList()));        }        }        class Type {        @Override        public String toString() {            return "type";        }    }

上面的这个例子比较简单,但是如果你有接触过泛型数组,你便对他的复杂度有一定的了解,由于创建泛型数组比较复杂,所以在实际的应用过程中一般会选择List的对泛型进行存储,如果实在需要使用泛型数组,则需要注意数组的在运行时的类型,think in java这本书中,对泛型数组的处理通过四个小程序对其进行了比较完整的描述。

程序一:这个程序主要说明了,在使用泛型数组中容易出现的问题,由于书中对于程序的说明比较详细,所以只对程序做引用。

class Generic<T> {    }        public class ArrayofGeneric {        public static void main(String[] args) {            Generic<Integer>[] genArr;                        // genArr = (Generic<Integer>[]) new Object[] {};                        // genArr=new Generic<Integer>[2];            genArr = (Generic<Integer>[]) new Generic[2];            System.out.println(genArr);        }    }

程序二:这个程序主要是说明在程序的执行过程中,泛型数组的类型信息会被擦除,且在运行的过程中数组的类型有且仅有Object[],如果我们强制转换成T[]类型的话,虽然在编译的时候不会有异常产生,但是运行时会有ClassCastException抛出。

    public class ArrayOfGeneric2<T> {        public T[] ts;            public ArrayOfGeneric2(int size) {            ts = (T[]) new Object[size];        }            public T get(int index) {            return ts[index];        }            public T[] rep() {            return ts;        }            public void set(int index, T t) {            ts[index] = t;        }            public static void main(String[] args) {            ArrayOfGeneric2<String> aog2 = new ArrayOfGeneric2<String>(10);            Object[] objs = aog2.rep();            System.out.println(objs);                       // String[] strs = aog2.rep();            // System.out.println(strs);        }        }

程序三:主要说明在对象中通过用Object[]来保存数据,则生成对象是,可以对其持有的对象在T和object之间进行转换,但是当设计到数组的转换时,还是会报ClassCastException

    public class ArrayOfGeneric3<T> {        Object[] ts;            public ArrayOfGeneric3(int size) {            ts = new Object[size];        }            public T get(int index) {            return (T) ts[index];        }            public T[] rep() {            return (T[]) ts;        }            public void set(int index, T t) {            ts[index] = t;        }            public static void main(String[] args) {            ArrayOfGeneric3<Integer> aog2 = new ArrayOfGeneric3<Integer>(10);            Object[] objs = aog2.rep();            for (int i = 0; i < 10; i++) {                aog2.set(i, i);                System.out.println(aog2.get(i));            }                Integer[] strs = aog2.rep();                System.out.println(strs);        }    }

程序四:是对泛型数组相对而言比较***的解决方案

    public class ArrayOfGeneric4<T> {            T[] ts;            public ArrayOfGeneric4(Class<T> type, int size) {                        ts = (T[]) Array.newInstance(type, size);        }            public T get(int index) {            return ts[index];        }            public T[] rep() {            return ts;        }            public void set(int index, T t) {            ts[index] = t;        }            public static void main(String[] args) {            ArrayOfGeneric4<Integer> aog2 = new ArrayOfGeneric4<Integer>(Integer.class, 10);            Object[] objs = aog2.rep();            for (int i = 0; i < 10; i++) {                aog2.set(i, i);                System.out.println(aog2.get(i));            }            try {                Integer[] strs = aog2.rep();                System.out.println("user Array.newInstance to create generci of array was successful!!!!! ");            } catch (Exception ex) {                ex.printStackTrace();            }        }    }

以上就是Java中怎么创建一个泛型数组,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯