• 数组与泛型(1)


      通常,数组和泛型不能很好地结合

    1  可以创建泛型数组的引用

    2 不能实例化具有参数化类型的数组

    3 可以参数化数组本身的类型

    4 可以创建非泛型的数组,然后转型

    package example;
    
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class Test {
        
        @SuppressWarnings("unchecked")
        public static void main(String[] args) {
            List<String>[] ls;
        //    ls = new List<String>[10];  //Cannot create a generic array of List<String>
            
            List[] list = new List[10];
            //不可以定义,但是可以类型转换
            ls = (List<String>[])list;   //    @SuppressWarnings("unchecked")
            
            Object[] objs = ls;  
            objs[0] = new ArrayList<String>();
            
            String[] strs;
            try {
                //编译通过,运行时报异常
                strs = arrayOfGenericType(10);  //java.lang.ClassCastException:
            } catch(Exception e) {
                System.out.println(e);
            }
            
            //此处运行正常
            strs = arrayOfGenericType(String.class, 4);
            System.out.println(Arrays.toString(strs));
        }
        
        @SuppressWarnings("unchecked")
        public static <T> T[] arrayOfGenericType(int s) {
            //此处必须强制转型,实际创建的是Object类型的数组
            return (T[]) new Object[s];  //    @SuppressWarnings("unchecked")
        }
        
        @SuppressWarnings("unchecked")
        public static <T> T[] arrayOfGenericType(Class<T> kind, int s) {
            //此处必须强制转型,实际创建的是kind类型的数组
            return (T[]) Array.newInstance(kind, s);  //    @SuppressWarnings("unchecked")
        }
    }

    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
    [null, null, null, null]

  • 相关阅读:
    Deep Learning入门
    基本技能(一)
    NNCRF之NNSegmentation, NNPostagging, NNNameEntity
    word2vector 使用方法 计算语义相似度
    Berkeley parser使用方法
    zpar使用方法之Chinese Word Segmentation
    【delphi】delphi出现‘尚未调用CoInitialize’异常
    VS05 VS08 VS10 工程之间的转换
    odbc数据源for mysql
    【delphi】Delphi过程、函数传递参数的八种方式
  • 原文地址:https://www.cnblogs.com/xurui1995/p/5339149.html
Copyright © 2020-2023  润新知