美文网首页技术栈
2019-03-20——Java反射 GenericDeclar

2019-03-20——Java反射 GenericDeclar

作者: 烟雨乱平生 | 来源:发表于2019-03-20 00:32 被阅读0次

    该接口定义了哪些地方可以定义类型变量(泛型)

    继承体系

    GenericDeclaration.png

    由继承体系可以看出我们定义泛型的类型变量只能在这三个地方——类、构造器和方法。

    注意泛型变量的定义和使用是不同的,我们可以在Field上使用泛型变量,但不能在Field上声明泛型变量

    该接口只声明了一个方法:

    方法 说明
    getTypeParameters() 返回实体上声明(定义)的所有的类型变量。
    public class Info {
        public static void main(String[] args) {
            Arrays.stream(Info.class.getDeclaredMethods()).forEach(method->{
                if("method".equalsIgnoreCase(method.getName())){
                    Parameter[] parameters = method.getParameters();
                    System.out.println("获取参数的类型");
                    for (Parameter parameter:parameters){
                        System.out.println(parameter.getType());
                    }
                    System.out.println("获取参数的参数化类型");
                    for (Parameter parameter:parameters){
                        System.out.println(parameter.getParameterizedType());
                    }
                    System.out.println("是否是类型变量");
                    for (Parameter parameter:parameters){
                        System.out.println(parameter.getParameterizedType() instanceof TypeVariable);
                    }
                    System.out.println("是否是参数化类型");
                    for (Parameter parameter:parameters){
                        System.out.println(parameter.getParameterizedType() instanceof ParameterizedType);
                    }
                    TypeVariable<Method>[] variables = method.getTypeParameters();
                    System.out.println("类型变量的名称");
                    for (TypeVariable variable:variables){
                        System.out.println(variable.getName());
                    }
                }
            });
        }
    
        <M,N> M method(M m,List<N> n){
            return m;
        }
    
    }
    

    输出结果是:

    获取参数的类型
    class java.lang.Object
    interface java.util.List
    获取参数的参数化类型
    M
    java.util.List<N>
    是否是类型变量
    true
    false
    是否是参数化类型
    false
    true
    类型变量的名称
    M
    N
    

    相关文章

      网友评论

        本文标题:2019-03-20——Java反射 GenericDeclar

        本文链接:https://www.haomeiwen.com/subject/hefamqtx.html