泛型四 TypeVariable

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 将被解析。

返回:
表示此类型变量的上边界的  Type 的数组 
抛出:
TypeNotPresentException - 如果任一边界引用不存在的类型声明 
MalformedParameterizedTypeException - 如果任一边界引用出于某种原因不能被实例化的参数化类型

getGenericDeclaration

D getGenericDeclaration()
返回  GenericDeclaration 对象,该对象表示声明此类型变量的一般声明。 

返回:
为此类型变量声明的一般声明。
从以下版本开始:
1.5

getName

String getName()
返回此类型变量的名称,它出现在源代码中。 

返回:

此类型变量的名称,它出现在源代码中






猜你喜欢

转载自blog.csdn.net/yz18931904/article/details/80532427
今日推荐