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 ...
随机推荐
- VS 对话框控件的Tab顺序问题
我们先来直观的看看各个控件的Tab顺序吧.打开“Resource View”视图,然后在资源中找到对话框IDD_ADDITION_DIALOG,双击ID后中间客户区域出现其模板视图.在主菜单中选择“F ...
- Android Studio 导入 Android 系统模块并编译和调试
FAQ: AS导入系统模块源码,并且能够编译调试,正常查看java doc ???? Android AOSP基础(五)Android Studio调试系统源码的三种方式http://liuwangs ...
- centOs7 安装mysql8
本文环境信息: 软件 版本 CentOS CentOS 7.4 MySQL 8.0.x 安装前先更新系统所有包 sudo yum update 安装 1. 添加 Yum 包 wget https:// ...
- docker配置镜像加速器
docker配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 sudo mkdir - ...
- Httpd服务入门知识-Httpd服务安装
Httpd服务入门知识-Httpd服务安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Httpd概述 1>.Httpd介绍 20世纪90年代初,国家超级计算机应用中心 ...
- Java自动化环境搭建笔记(2)
Java自动化环境搭建笔记(2) 自动化测试 在笔记一中已经完成了一键构建项目.xml指定规划测试集.数据解耦与allure报告生成的开发.接下来便是: 浏览器驱动通过配置启动 页面元素定位解耦,通过 ...
- virt-install创建虚拟机并制作成模板
一.使用virt-install创建新的虚拟机 virt--template --ram --vcpu= --virt-type kvm --cdrom=/Data/kvm/iso/CentOS-.i ...
- 用Java的大整数类BigInteger来实现大整数的一些运算
关于BigInteger的构造函数,一般会用到两个: BigInteger(String val); //将指定字符串转换为十进制表示形式: BigInteger(String val,int rad ...
- 如何将VOC XML文件转化成COCO数据格式
数据转换实在是个烦人的工作,被折磨了很久决定抽出时间整理一下,仅供参考. 在一个项目中,我需要将已有的VOC的xml标注文件转化成COCO的数据格式,为了方便理解,文章按如下顺序介绍: XML文件内容 ...
- 限制textarea 文本框的长度(收集了几个办法)
文章参考地址:http://blog.csdn.net/nhconch/article/details/4223076 需求背景: 前几天,因为客户有一个需求说,需要对一个评论(一个textarea文 ...