关于创建Class泛型数组

问题描述

已知public class B implements A(){};public class C implements A(){};为什么下面的代码不能编译通过Class<? super A>[] claszz = new Class<? super A>[]{ B.class, C.class };假如不使用泛型则可以编译通过Class[] claszz = new Class[]{ B.class, C.class };求解析 问题补充:283433775 写道

解决方案

楼主的问题类似以下问题,ArrayList<Integer>[] intValues1 = new ArrayList<Integer>[5]; ArrayList<Integer>[] intValues2 = new ArrayList[5]; ArrayList<ArrayList<Integer>> intValues3 = new ArrayList<ArrayList<Integer>>(); 第一条语句是编译不通过的,第二条语句能通过的但是会包报类型不安全异常,第三种是完全通过编译的第一条语句简单的说就是泛型和数组不能共存,但是说可以使用List代替数组来创建ArrayList<Class<? super A>> intValues4 = new ArrayList<Class<? super A>>();
解决方案二:
你要定义的是数组,而数组是不支持泛型的检查的,你给他加上泛型编译器反倒没法识别,当然就编译错误了,此处你定义的类型就是数组,而不是Class。看看API,java中并不是每一种类型都支持泛型的,支持泛型是声明泛型了才能支持泛型。
解决方案三:
java不支持你写的那种泛型数组,thinking in java里面写过,可以去书中找下原因,泛型的出现就是为了解决类型安全问题,那样创建数组是会破坏类型安全的
解决方案四:
你是java的程序,是不支持泛型数组的直接创建的。使用下面的方式://java是不支持范型数组的,think in java里面讲过啊,底层的数组类型只能是object的.//不过可以通过java反射来实现啊!import java.lang.reflect.*;public class GenericArray<T>{ private T[] array; public GenericArray(Class<T> type,int size){ array = (t[])Array.newInstance(type,size); } public void put(int index,T item){ array[index]=item; } public T get(int index){ return array[index]; }}
解决方案五:
不应该是这样吗?Class<? extends A>[] claszz = new Class<? extends A>[]{ B.class, C.class };

时间: 2024-09-20 09:41:55

关于创建Class泛型数组的相关文章

在 Visual Basic .NET 和 Visual C# .NET 中创建控件数组

visual|创建|控件|数组 在 Visual Basic .NET 和 Visual C# .NET 中创建控件数组 Matthew A. StoeckerVisual Studio TeamMicrosoft Corporation 2002 年 1 月 摘要:本文介绍如何使用 Visual Basic .NET 和 Visual C# .NET 创建和管理控件数组. 目录 简介 前提 创建项目 实现集合 公开控件数组 创建公共事件处理程序 测试项目 总结 简介数组为使用共享公共功能的控件

在 Visual Basic .NET创建控件数组

visual|创建|控件|数组 在 Visual Basic .NET创建控件数组 简介数组为使用共享公共功能的控件组提供了一种方便的方式.例如,控件组可以用来显示相关数据,或者在单击时提供相关的操作.Visual Basic .NET本身并不支持创建控件数组,但您可以通过编程来复制控件数组的全部功能.本文将指导您创建一个复制控件数组功能的简单组件. 控件数组的某些用处如下所示: 通过索引访问具有相同名称的控件集合,您可以按编号检索和设置属性,并遍历数组中的所有控件.这一操作的典型语法如下:'

java中创建多维数组

在Java里可以方便地创建多维数组:   //: MultiDimArray.java // Creating multidimensional arrays. import java.util.*; public class MultiDimArray { static Random rand = new Random(); static int pRand(int mod) { return Math.abs(rand.nextInt()) % mod + 1; } public stati

字符数组-C++动态创建不定长数组

问题描述 C++动态创建不定长数组 我想通过直接输入一个任意大小的字符串来创建一个字符数组,但又不想浪费多余的空间,要怎么做到呢?新手... 解决方案 char * newchar(const char * ps){ char * prt = 0; if(ps){ int nlen = strlen(ps); prt = new char[nlen+1]; strcpy(prt,ps); } return prt; } 解决方案二: 直接用指针,可以动态申请大小,且可以将指针当成数据来访问. 如

Java泛型--泛型应用--泛型接口、泛型方法、泛型数组、泛型嵌套

1.泛型接口 1.1泛型接口的基本概念 1.2泛型接口实现的两种方式 定义子类:在子类的定义上也声明泛型类型 interface Info<T>{ // 在接口上定义泛型 public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型 } class InfoImpl<T> implements Info<T>{ // 定义泛型接口的子类 private T var ; // 定义属性 public InfoImpl(T var){ // 通过

关于接收泛型数组时这里的public static &amp;amp;lt;T&amp;amp;gt; void怎么理解?

问题描述 关于接收泛型数组时这里的public static <T> void怎么理解? public class Test2{ public static void main(String[] args){ Integer i[] = fun1(1,2,3,4,5,6); fun2(i); } public static T[] fun1(T...arg){ return arg; } public static void fun2(T param[]){ System.out.print(

二级指针创建二维数组

问题描述 二级指针创建二维数组 1) 编写函数CreateMatrix( int **a,int n, int m),生成一个n行.m列的矩阵,矩阵中的元素由随即函数rand()生成(范围1~99). 解决方案 #include <stdio.h> #include <stdlib.h> #include <time.h> void CreateMatrix( int **a,int n, int m) { int i,j; a = (int**)malloc(n*si

iostream-求大神帮忙解疑/*创建一个结构数组,用于存储多个学生的学号、姓名、成绩。

问题描述 求大神帮忙解疑/*创建一个结构数组,用于存储多个学生的学号.姓名.成绩. /*创建一个结构数组,用于存储多个学生的学号.姓名.成绩.输出1:最高分学生的学号.姓名.输入2:所有学生的平均分*/#includeusing namespace std;struct student{ char num [40]; char name [40]; float score[40]; float ave;}; student stu; int main(){ //定义变量 int imaxinte

Go语言创建、初始化数组的常见方式汇总_Golang

本文实例总结了Go语言创建.初始化数组的常见方式.分享给大家供大家参考.具体分析如下: Go语言的语法很灵活,以下展示了创建并初始化数组的多种方式: 复制代码 代码如下: //数组初始化的各种方式  func arraySliceTest0201() {      //创建数组(声明长度)      var array1 = [5]int{1, 2, 3}      fmt.Printf("array1--- type:%T \n", array1)      rangeIntPrin