https://github.com/yzmaodeng/java-keypointknowledge/blob/master/src/main/java/com/zl/Type/MyTypeVariable.java
实例
package com.zl.Type;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
interface A{
}
interface B {
}
public class MyTypeVariable<K extends A & B, V> {
public static void main(String[] args) {
Type[] types = MyTypeVariable.class.getTypeParameters();
for(Type type : types){
TypeVariable t = (TypeVariable)type;
System.out.println(t.getGenericDeclaration());
int size = t.getBounds().length;
System.out.println(t.getBounds()[size - 1]);
System.out.println(t.getName() + "\n-------------分割线-------------");
}
}
}
class com.zl.Type.MyTypeVariable
interface com.zl.Type.B
K
-------------分割线-------------
class com.zl.Type.MyTypeVariable
class java.lang.Object
V
-------------分割线-------------
接口 TypeVariable<D extends GenericDeclaration>
- 所有超级接口:
- Type
public interface TypeVariable<D extends GenericDeclaration>extends Type
TypeVariable 是各种类型变量的公共高级接口。类型变量在反射方法首次需要时创建(在此包中指定)。如果类型变量 t 由类型(即类、接口或注释类型)T 引用,而且 T 由 T 的第 n 个封闭类声明(请参见 JLS 8.1.2),那么创建 t 需要解析(请参见 JVMS 5)T 的第 i 个封闭类,其中 i = 0 到 n(包含)。创建某个类型变量决不能导致创建其边界。重复创建类型变量没有效果。
可以在运行时将多个对象实例化,以表示一个给定的类型变量。尽管类型变量仅创建一次,这并不意味着任何缓存实例的要求都表示类型变量。不过,表示类型变量的所有实例彼此必须相等 (equal())。因此,使用类型变量的用户决不能依靠实现此接口的类实例的身份。
- 从以下版本开始:
- 1.5
方法摘要 | |
---|---|
Type[] |
getBounds() 返回表示此类型变量上边界的 Type 对象的数组。 |
D |
getGenericDeclaration() 返回 GenericDeclaration 对象,该对象表示声明此类型变量的一般声明。 |
String |
getName() 返回此类型变量的名称,它出现在源代码中。 |
方法详细信息 |
---|
getBounds
Type[] getBounds()
-
返回表示此类型变量上边界的
Type 对象的数组。注意,如果未显式声明上边界,则上边界为
Object。
对于每个上边界 B:
- 如果 B 是一个参数化类型或一个类型变量,则会创建它(请参见
ParameterizedType
,了解创建参数化类型过程的详细信息)。 - 否则,B 将被解析。
- 如果 B 是一个参数化类型或一个类型变量,则会创建它(请参见
-
- 返回:
- 表示此类型变量的上边界的 Type 的数组
- 抛出:
-
TypeNotPresentException
- 如果任一边界引用不存在的类型声明 -
MalformedParameterizedTypeException
- 如果任一边界引用出于某种原因不能被实例化的参数化类型
getGenericDeclaration
D getGenericDeclaration()
- 返回 GenericDeclaration 对象,该对象表示声明此类型变量的一般声明。
-
- 返回:
- 为此类型变量声明的一般声明。
- 从以下版本开始:
- 1.5
getName
String getName()
- 返回此类型变量的名称,它出现在源代码中。
-
- 返回:
此类型变量的名称,它出现在源代码中