java对象生成随意属性值
- public class RandomObjectValue {
- public static <T> T getObject(Class<?> clazz) {
- T t = null;
- if (clazz == null) {
- return t;
- }
- if((t = (T)getPrimitive(clazz))!= null){
- return t;
- }
- //需要有无参的构造器
- try {
- t = (T)clazz.newInstance();
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- Field[] fields = clazz.getDeclaredFields();
- //属性字段
- String fileName = "";
- //符合JavaBean规则的属性
- PropertyDescriptor property = null;
- //set方法对象
- Method method = null;
- for (int i = 0; i < fields.length; i++) {
- //属性字段
- fileName = fields[i].getName();
- //获取属性上的注解
- FormatAnnotation annotation = fields[i].getAnnotation(FormatAnnotation.class);
- try {
- property = new PropertyDescriptor(fileName, clazz);
- } catch (IntrospectionException e) {
- //没有设置set方法,或者不符合JavaBean规范
- continue;
- }
- //获取set方法对象
- method = property.getWriteMethod();
- //如果是字节类型(包含基本类型和包装类)
- if (fields[i].getType() == byte.class || fields[i].getType() == Byte.class) {
- try {
- method.invoke(t, SelfUtils.getByteValue());
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- //如果是short类型(包含基本类型和包装类)
- else if (fields[i].getType() == short.class || fields[i].getType() == Short.class) {
- try {
- method.invoke(t, SelfUtils.getShortValue());
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- //如果是char类型(包含基本类型和包装类)
- else if (fields[i].getType() == char.class || fields[i].getType() == Character.class) {
- try {
- method.invoke(t, SelfUtils.getCharValue());
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- //如果是整型(包含基本类型和包装类)
- else if (fields[i].getType() == int.class || fields[i].getType() == Integer.class) {
- try {
- //为属性赋值
- method.invoke(t, SelfUtils.getIntValue());
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- //如果是float(包含基本类型和包装类)
- else if (fields[i].getType() == float.class || fields[i].getType() == Float.class) {
- try {
- //为属性赋值
- method.invoke(t, SelfUtils.getFloatValue());
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- //如果是double(包含基本类型和包装类)
- else if (fields[i].getType() == double.class || fields[i].getType() == Double.class) {
- try {
- //为属性赋值
- method.invoke(t, SelfUtils.getDoubleValue());
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- //如果是double(包含基本类型和包装类)
- else if (fields[i].getType() == long.class || fields[i].getType() == Long.class) {
- try {
- //为属性赋值
- method.invoke(t, SelfUtils.getDoubleValue());
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- //如果是boolean(包含基本类型和包装类)
- else if (fields[i].getType() == boolean.class || fields[i].getType() == Boolean.class) {
- try {
- //为属性赋值
- method.invoke(t, SelfUtils.getBooleanValue());
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- //如果是boolean(包含基本类型和包装类)
- else if (fields[i].getType() == String.class) {
- try {
- //为属性赋值
- method.invoke(t, SelfUtils.getRamdomString(8));
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- //如果是日期类型
- else if (fields[i].getType() == Date.class) {
- try {
- method.invoke(t, SelfUtils.getDateValue());
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- //如果是List类型
- else if (fields[i].getType().isAssignableFrom(List.class)) {
- //获取泛型
- Type type = fields[i].getGenericType();
- //如果不是泛型,不做处理
- if (type == null) {
- continue;
- }
- if (type instanceof ParameterizedType) {
- ParameterizedType parameterizedType = (ParameterizedType)type;
- Class<?> genericClazz = (Class)parameterizedType.getActualTypeArguments()[0];
- int length = 0;
- String listLength = "4";
- if (annotation != null) {
- listLength = annotation.listLength();
- }
- if (StringUtils.isEmpty(listLength) || !listLength.matches(RegularExpression.allNumber)) {
- length = 4;
- }
- length = Integer.parseInt(listLength);
- List<Object> list = new ArrayList<>(length);
- for (int j = 0; j < length; j++) {
- list.add(getObject((Class<T>)genericClazz));
- }
- try {
- method.invoke(t, list);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- }
- //如果是Map类型
- else if(fields[i].getType().isAssignableFrom(Map.class)){
- //获取泛型
- Type types = fields[i].getGenericType();
- //如果不是泛型的话则不处理
- if(types == null){
- continue;
- }
- if(types instanceof ParameterizedType){
- int length = 4;
- if(annotation != null){
- String lengthStr = annotation.mapLength();
- if(!StringUtils.isEmpty(lengthStr) && lengthStr.matches(RegularExpression.allNumber)){
- length = Integer.parseInt(lengthStr);
- }
- }
- ParameterizedType parameterizedType = (ParameterizedType)types;
- Map<Object,Object> map = new HashMap();
- for(int j=0;j<length;j++){
- map.put(getObject((Class<?>)parameterizedType.getActualTypeArguments()[0]),
- getObject((Class<?>)parameterizedType.getActualTypeArguments()[1]));
- }
- try {
- method.invoke(t,map);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- }
- //这里默认处理的是自定义对象
- else {
- try {
- Object obj = getObject(fields[i].getType());
- method.invoke(t,obj);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- }
- return t;
- }
- private static Object getPrimitive(Class<?> clazz) {
- //如果是byte类型(包含基本类型和包装类)
- if (clazz == byte.class || clazz == Byte.class) {
- return SelfUtils.getByteValue();
- }
- //如果是short类型(包含基本类型和包装类)
- if (clazz == short.class || clazz == Short.class) {
- return SelfUtils.getShortValue();
- }
- //如果是char类型(包含基本类型和包装类)
- if (clazz == char.class || clazz == Character.class) {
- return SelfUtils.getCharValue();
- }
- //如果是整型(包含基本类型和包装类)
- if (clazz == int.class || clazz == Integer.class) {
- //为属性赋值
- return SelfUtils.getIntValue();
- }
- //如果是float(包含基本类型和包装类)
- if (clazz == float.class || clazz == Float.class) {
- //为属性赋值
- return SelfUtils.getFloatValue();
- }
- //如果是double(包含基本类型和包装类)
- if (clazz == double.class || clazz == Double.class) {
- //为属性赋值
- return SelfUtils.getDoubleValue();
- }
- //如果是double(包含基本类型和包装类)
- if (clazz == long.class || clazz == Long.class) {
- //为属性赋值
- return SelfUtils.getDoubleValue();
- }
- //如果是boolean(包含基本类型和包装类)
- if (clazz == boolean.class || clazz == Boolean.class) {
- return SelfUtils.getBooleanValue();
- }
- //如果是boolean(包含基本类型和包装类)
- if (clazz == String.class) {
- //为属性赋值
- return SelfUtils.getRamdomString(8);
- }
- //如果是日期类型
- if (clazz == Date.class) {
- return SelfUtils.getDateValue();
- }
- return null;
- }
- }
- public class SelfUtils {
- private static Random random = new Random();
- private static char[] ch = {'A', 'B', 'C', 'D', 'E', 'F', 'G',
- 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b',
- 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
- 'x', 'y', 'z'};
- public static String getRamdomString(int length) {
- // char[] ch = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
- // 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
- // 'Z', 'a', 'b',
- // 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
- // 'u', 'v', 'w',
- // 'x', 'y', 'z', 'o', '1'};
- if (length <= 0) {
- length = ch.length;
- }
- char[] chars = new char[length];
- for (int i = 0; i < length; i++) {
- chars[i] = ch[random.nextInt(ch.length)];
- }
- return new String(chars);
- }
- public static int getIntValue() {
- return random.nextInt(1000);
- }
- public static byte getByteValue() {
- return (byte)(random.nextInt() & 0xEF);
- }
- public static long getLongValue() {
- return random.nextLong();
- }
- public static short getShortValue() {
- return (short)(random.nextInt() & 0xEFFF);
- }
- public static float getFloatValue() {
- return random.nextFloat();
- }
- public static double getDoubleValue(){
- return random.nextDouble();
- }
- public static char getCharValue() {
- return ch[random.nextInt(ch.length)];
- }
- public static boolean getBooleanValue() {
- return random.nextInt()%2 == 0;
- }
- public static Date getDateValue() {
- return new Date();
- }
- }
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.FIELD)
- public @interface FormatAnnotation {
- /**
- * 日期的格式
- * @return
- */
- String dateFormat() default "yyyy-MM-dd hh:mm:ss";
- /**
- * list集合的长度
- * @return
- */
- String listLength() default "4";
- /**
- * map集合的长度
- * @return
- */
- String mapLength() default "4";
- }
- public class RegularExpression {
- public static final String allNumber = "[0-9]{1,}";
- }
https://blog.csdn.net/Procedure_monkey/article/details/80308253
java对象生成随意属性值的更多相关文章
- 【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更
java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; imp ...
- 运行时给java对象动态的属性赋值
运行时给java对象动态的属性赋值 如何给java对象动态的属性赋值(也就是在代码执行的时候才决定给哪个属性赋值) 1.自定义一个工具类ReflectHelper,代码如下所示: pa ...
- java中两个对象间的属性值复制,比较,转为map方法实现
package com.franson.study.util; import java.lang.reflect.InvocationTargetException; import java.lang ...
- Java反射获取对象VO的属性值(通过Getter方法)
有时候,需要动态获取对象的属性值. 比如,给你一个List,要你遍历这个List的对象的属性,而这个List里的对象并不固定.比如,这次User,下次可能是Company. e.g. 这次我需要做一个 ...
- 报表生成poi----java操作java对象生成execl表单
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
- JSON字符串反序列化成对象_部分属性值反序列化失败
简介:本人在开发webapi接口时遇到了:一个复杂的Json字符串在反序列化为对象时报,无法发序列化其中的一个属性对象? 使用方法: InternalRecommendRequestFormModel ...
- [转]js对象中取属性值(.)和[ ]的区别
原文地址:https://www.jianshu.com/p/6a76530e4f8f 今天在写js的过程中遇到这么一个问题,取一个对象的属性值,通过obj.keys怎么都取不出来,但是用obj[ke ...
- Java中生成一个唯一值的方式
现总结几种生成一个唯一值的方式 第一种:采用nanoTime() // 理论上存在重复的可能,可以在后面再加上一个随机字符串 Random r = new Random(); for (int i = ...
- JAVA里List集合中的对象根据对象的某个属性值降序或者升序排序
需要使用JDK1.8及以上 package com.stream; import java.util.Comparator; import java.util.List; public class T ...
随机推荐
- javaScript 一些小技巧
日历 创建过去七天的数组,如果将代码中的减号换成加号,你将得到未来7天的数组集合 // 创建过去七天的数组 [...Array(7).keys()].map(days => new Date(D ...
- jQuery选择器与过滤器(二)
一.jQuery选择器1.基本选择器:所有选择器 *标签选择器 标签名ID选择器 #ID类选择器 .className组合选择器 selector1,selector2 ...
- uni-app学习(二)
1. uni-app学习(二) 1.1. 好用css记录 一定透明度的背景色background: rgba(255,255,255,.6); 1.2. 好用的代码段 store(用户登录) expo ...
- 28、IE报vuex requires a Promise polyfill in this browser问题解决
解决方法第一步: 安装 babel-polyfill . babel-polyfill可以模拟ES6使用的环境,可以使用ES6的所有新方法 npm install --save babel-polyf ...
- C# 判断域名或ip+端口号 是否能正常连接?
private static ManualResetEvent TimeoutObject = new ManualResetEvent(false); /// <summary> /// ...
- java并发值多线程同步业务场景以及解决方案
1.20个人排队同时访问2个购票窗口,同时能购票的只有两个人,当其中一个人买票完成后,18个人中的其中一个在占用窗口进行购买. 20个人相当于20个线程,2相当于资源,当18个人等待的时候,相当于线程 ...
- 怎么解决前端线上Bug
有一种八阿哥(Bug),叫"在我电脑上是好的呀". 有一种解决方式,叫"你去好好排查一下你自己的代码". 有一种控诉,叫"这绝不是后端的问题" ...
- Docker 0x01:Docker Container容器技术
目录 Docker Container容器技术 一句话回答什么是容器? 为什么要有容器? 容器技术的影响 容器技术浅谈原理,怎么实现的?为什么能够这样轻量级标准化 难点 容器的标准 花边 Docker ...
- filter - date 日期插件
为什么要用date插件: 我们希望日志展示的时间就是日志生成的时间,一般日志中都会附加时间,这样方便根据时间查找问题.但在logstash中,默认使用@timestamp时间值来表示日志的时间,@ti ...
- 基于gin框架搭建的一个简单的web服务
刚把go编程基础知识学习完了,学习的时间很短,可能还有的没有完全吸收.不过还是在项目中发现知识,然后在去回顾已学的知识,现在利用gin这个web框架做一个简单的CRUD操作. 1.Go Web框架的技 ...