zoukankan      html  css  js  c++  java
  • Q:java中的泛型数组

     对于java,其是不支持直接创建泛型数组的。当采用如下的方式去创建一个泛型数组时,其会出现错误,编译无法通过的情况。

    package other.jdk1_5;
    /**
     * 该类用于演示泛型数组的创建
     * @author 学徒
     *
     */
    public class Generics<T>
    {
    	T[] a=new T[];
    }
    
    
    报错的信息:
    Multiple markers at this line
    	- Cannot create a generic array of T
    	- Variable must provide either dimension expressions or an array 
    	
    

    但是,在java中,其却可以创建泛型类型的数组变量,如下所示的代码,其并不会出现错误的情况。

    package other.jdk1_5;
    /**
     * 该类用于演示泛型数组的创建
     * @author 学徒
     *
     */
    public class Generics<T>
    {
    	T[] a;
    }
    
    

     一个问题是,我们想要创建一个泛型类型的数组变量,那么应当怎么办?这里,可以通过反射的方式来进行解决。

    示例代码如下:

    package other.jdk1_5;
    
    import java.lang.reflect.Array;
    
    /**
     * 该类用于演示泛型数组的创建
     * @author 学徒
     *
     */
    public class Generics
    {
    	/**
    	 * 用于创建一个数据类型为T的泛型数组
    	 * @param clazz 泛型类型的Class类
    	 * @param length 数组的长度
    	 * @return 泛型数组
    	 */
    	@SuppressWarnings("unchecked")
    	public static <T> T[] newArrayByArrayClass(Class<T[]> clazz,int length)
    	{
    		//class对象的getComponentType方法返回的是该class类对象所对应的元素类型
    		return (T[]) Array.newInstance(clazz.getComponentType(), length);
    	}
    	
    	public static <T> T[] newArrayByClass(Class<T> clazz,int length)
    	{
    		return (T[])Array.newInstance(clazz, length);
    	}
    	public static void main(String[] args)
    	{
    		//通过泛型类型数组的class对象创建数组
    		String[] a=newArrayByArrayClass(String[].class,10);
    		//通过泛型类型的class对象创建数组
    		String[] b=newArrayByClass(String.class,10);
    	}
    }
    

     在《算法》第四版一书的第一章中,其在提到关于泛型的那部分内容时,有说到可用通过如下的代码的方式创建泛型数组

    T[] a=(T[])new Object[cap];
    

    显然,这段代码在编译器的检查中,会给出一条警告信息,虽然可以忽略它。但是,通过该方式生成的代码,在运行期间仍然会出现类型强转错误,因为对于该方式创建的泛型数组而言,其并非为运用了向下转型技术,因Object数组类型并非为任何数据类型的父类型。

    回到目录|·(工)·)

  • 相关阅读:
    Linq用法笔记
    关于Json的总结
    关于Json的总结
    Managing uniquely tagged items using the internet
    关于Json的总结
    Net中Session的用法
    Net中Session的用法
    Net中Session的用法
    【基础】Asp.Net操作Cookie总结
    Asp.Net操作Cookie总结
  • 原文地址:https://www.cnblogs.com/MyStringIsNotNull/p/8253851.html
Copyright © 2011-2022 走看看