深入学习java源码之 Array.newInstance()与Array.get()
Class<T>与Class<?>
Class<T>在实例化的时候,T要替换成具体类,固定的泛型指类型是固定的,比如:Interge,String.
Class<?>它是个通配泛型,?可以代表任何类型 ,<?>没有extends,则默认是允许Object及其下的任何Java类了。也就是任意正在运行的类。
Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类。类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,在Java使用类型类来表示一个类型。所有的类型类都是Class类的实例。getClass()会看到返回Class<?>。
JDK中,普通的Class.newInstance()方法的定义返回Object,要将该返回类型强制转换为另一种类型;
创建一个Class<T>类型的实例,但是使用泛型的Class<T>,Class.newInstance()方法具有一个特定的返回类型;
泛型方法,与其所在的类是否泛型没有关系。要定义泛型方法,只需将泛型参数列表置于方法的修饰符(public,static,final,abstract等)之后,返回值声明之前。
其中第一个<T>是与传入的参数Class<T>相对应的,相当于返回值的一个泛型,后面的T是返回值类型,代表方法必须返回T类型的(由传入的Class<T>决定)
调用方法 Class.forName() 或者使用类常量X.class。 Class.forName() 被定义为返 回 Class<?>。另一方面,类常量 X.class 被定义为具有类型 Class<X>,所 以 String.class 是Class<String> 类型的。
使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。
需要注意的是,一个static方法,无法访问泛型类的类型参数,所以,若要static方法需要使用泛型能力,必须使其成为泛型方法。
方法
Modifier and Type | Method and Description |
| 返回指定数组对象中的索引组件的值。 |
| 返回指定数组对象中的索引组件的值,如 |
| 返回指定数组对象中的索引组件的值,如 |
| 返回指定数组对象中索引组件的值,如 |
| 返回指定数组对象中的索引组件的值,如 |
| 返回指定数组对象中的索引组件的值,如 |
| 返回指定数组对象中的索引组件的值,如 |
| 返回指定数组对象的长度,如 |
| 返回指定数组对象中索引组件的值,如 |
| 返回指定数组对象中的索引组件的值,如 |
| 创建具有指定组件类型和尺寸的新数组。 |
| 创建具有指定组件类型和长度的新数组。 |
| 将指定数组对象的索引组件的值设置为指定的新值。 |
| 将指定数组对象的索引组件的值设置为指定的 |
| 将指定数组对象的索引组件的值设置为指定的 |
| 将指定数组对象的索引组件的值设置为指定的 |
| 将指定数组对象的索引组件的值设置为指定的 |
| 将指定数组对象的索引组件的值设置为指定的 |
| 将指定数组对象的索引组件的值设置为指定的 |
| 将指定数组对象的索引组件的值设置为指定的 |
| 将指定数组对象的索引组件的值设置为指定的 |
java源码
抛出表示一种方法已经通过了非法或不正确的参数。
抛出以表示使用非法索引访问数组。 索引为负数或大于或等于数组的大小。
抛出以表示某种索引(例如数组,字符串或向量)的索引超出范围。
应用程序可以将此类子类化以指示类似的异常。