JAVA反射机制:是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象方法的功能称为java语言的反射机制。
一个反射解析器:
运用泛型、反射、集合类等相关知识实现一个API参数解析器
String queryString="Cpu=2&Memory=4.0&AutoCreated=null&Container.1.Name=nginx&Container.1.Command.1=/bin/sh"
请根据规则将上述queryString字符串自动映射到对象的字段上,以下是参数接收对象,对象中的属性只提供了get方法,不提供set方法,请通过反射设置对应的属性值,Pod对象默认提供了无参构造方法。
1.字段Class类型可以是八种原始类型以及对应的包装类、String、BigDecimal以及自定义Object,列表参数只需使用ArrayList实现即可,无须支持其它Array、Map等数据结构。
2.queryString中的键key都是大写开头,对象中的属性必须是小写字母开头符合规范,需自动适配,如果参数中的键值key是小写字符开头,请自动忽略,如参数中有cpu=2,此时不应该将该值赋给对象中属性cpu,必须要求参数key都是大写的即Cpu=2才进行适配。
3.通过自定义注解 SkipMappingValueAnnotation标注在属性上,工具类则不处理该属性,不去覆盖对象默认值,这个注解在后面以定义好,请勿修改类名以及包名,直接复制到工程中即可。
4.当发现对应的value是null或者字符串"NULL","null"、"Null"时,能正确处理原始类型默认值,此时如果参数中传递了AutoCreated=null字符串,需自动将对象中的autoCreated设置为false。
5.当属性字段是一个列表类型时,请按照N进行排序,此时如下应该生成2个对象的列表List<Container>,赋值给pod对象中的container字段,Container.1.Name中间的数字没有实际意义,只是用来决定其在列表中的顺序,数字越小,在列表中的下标越小,如下 nginx对应的对象是列表中第一个对象,下标为0,紧随其后的是redis。
标签:反射,对象,列表,参数,null,属性 From: https://www.cnblogs.com/cjhtxdy/p/17700068.html