美文网首页
Java反射(三)

Java反射(三)

作者: Sandy_678f | 来源:发表于2021-12-01 18:16 被阅读0次

属性或者方法为参数化类型的处理

public class User {

    String name;

    Integer age;

    Car car;

    List<String> hobbies;

    List<Car> carList;

    Map<String, Car> carMap;

    void addCar(Car car){
        carList.add(car);
    }

    void addHobby(List<String> hobbies){

    }

    void addCar(List<Car> cars){

    }
}
public class Car {
    String carNum;
    List<String> carColor;
}
public class Test {

    public static void main(String[] args) {

        Class clz = User.class;

        System.out.println("==========");

        //解析属性
        Field[] fields = clz.getDeclaredFields();
        for (Field field: fields){
            String name = field.getType().getName();
            System.out.println(field+": "+name);
        }
        System.out.println("==========");
        for (Field field: fields){
            String name = field.getType().getClass().getName();
            System.out.println(field+": "+name);
        }
        System.out.println("==========");
        for (Field field: fields){
            String name = field.getGenericType().getTypeName();
            System.out.println(field+": "+name);
        }
        System.out.println("==========");
        for(Field field: fields){
            if(field.getGenericType() instanceof ParameterizedType){
                Type[] types =((ParameterizedType)(field.getGenericType())).getActualTypeArguments();
                for(Type type:types){
                    System.out.println("方法1:"+type+": "+type.getTypeName());
                }
                Type type = ((ParameterizedType)(field.getGenericType())).getRawType();
                System.out.println("方法2:"+type+": "+type.getTypeName());
                System.out.println("==");
            }
        }

        System.out.println("====================华丽丽的分割线=====================");
        //解析方法
        Method[]  methods = clz.getDeclaredMethods();
        for(Method method:methods){
            Parameter[] parameters = method.getParameters();
            for(Parameter parameter:parameters){
                String name = parameter.getType().getName();
                System.out.println(method+": "+name);
            }
        }
        System.out.println("============");
        for(Method method:methods){
            Type[] types = method.getGenericParameterTypes();
            for(Type type : types){
                if(type instanceof ParameterizedType){
                    Type[] types1 = ((ParameterizedType)type).getActualTypeArguments();
                    for(Type type1 :types1){
                        String name = type1.getTypeName();
                        System.out.println(method+": "+name);
                    }
                }
            }
        }
    }
}

运行结果

==========
java.lang.String reflectdemo.User.name: java.lang.String
java.lang.Integer reflectdemo.User.age: java.lang.Integer
reflectdemo.Car reflectdemo.User.car: reflectdemo.Car
java.util.List reflectdemo.User.hobbies: java.util.List
java.util.List reflectdemo.User.carList: java.util.List
java.util.Map reflectdemo.User.carMap: java.util.Map
==========
java.lang.String reflectdemo.User.name: java.lang.Class
java.lang.Integer reflectdemo.User.age: java.lang.Class
reflectdemo.Car reflectdemo.User.car: java.lang.Class
java.util.List reflectdemo.User.hobbies: java.lang.Class
java.util.List reflectdemo.User.carList: java.lang.Class
java.util.Map reflectdemo.User.carMap: java.lang.Class
==========
java.lang.String reflectdemo.User.name: java.lang.String
java.lang.Integer reflectdemo.User.age: java.lang.Integer
reflectdemo.Car reflectdemo.User.car: reflectdemo.Car
java.util.List reflectdemo.User.hobbies: java.util.List<java.lang.String>
java.util.List reflectdemo.User.carList: java.util.List<reflectdemo.Car>
java.util.Map reflectdemo.User.carMap: java.util.Map<java.lang.String, reflectdemo.Car>
==========
方法1:class java.lang.String: java.lang.String
方法2:interface java.util.List: java.util.List
==
方法1:class reflectdemo.Car: reflectdemo.Car
方法2:interface java.util.List: java.util.List
==
方法1:class java.lang.String: java.lang.String
方法1:class reflectdemo.Car: reflectdemo.Car
方法2:interface java.util.Map: java.util.Map
==
====================华丽丽的分割线=====================
void reflectdemo.User.addCar(java.util.List): java.util.List
void reflectdemo.User.addCar(reflectdemo.Car): reflectdemo.Car
void reflectdemo.User.addHobby(java.util.List): java.util.List
============
void reflectdemo.User.addCar(java.util.List): reflectdemo.Car
void reflectdemo.User.addHobby(java.util.List): java.lang.String

相关文章

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • Java反射(三)

    属性或者方法为参数化类型的处理 运行结果

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • Java 反射机制

    Java 反射机制 什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 ...

  • 一探究竟:Java反射效率低的原因到底在哪?

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • 面试官说:大家都说 Java 反射效率低,你知道原因在哪里么

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

网友评论

      本文标题:Java反射(三)

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