我在这里使用反射和递归来获取我要测试的坚固对象中的所有字段。 我也正在使用PODAM,我希望有人会发现它有用。

public class Populate {

private final PodamFactory podamFactory = new PodamFactoryImpl();

private

P getManufacturedPojo(final Class

klass) {

return podamFactory.manufacturePojo(klass);

}

private Object populateAllIn(final Class targetClass) throws IllegalAccessException, InstantiationException {

final Object target = targetClass.newInstance();

//Get all fields present on the target class

final Set allFields = getAllFields(targetClass, Predicates.alwaysTrue());

//Iterate through fields

for (final Field field : allFields) {

//Set fields to be accessible even when private

field.setAccessible(true);

final Class> fieldType = field.getType();

if (fieldType.isEnum() && EnrichmentType.class.isAssignableFrom(fieldType)) {

//handle any enums here if you have any

}

//Check if the field is a collection

if (Collection.class.isAssignableFrom(fieldType)) {

//Get the generic type class of the collection

final Class> genericClass = getGenericClass(field);

//Check if the generic type of a list is abstract

if (Modifier.isAbstract(genericClass.getModifiers())) {

//You might want to use any class that extends

//Your abstract class like

final List list = new ArrayList<>();

list.add(populateAllIn(ClassExtendingAbstract.class));

field.set(target, list);

} else {

final List list = new ArrayList<>();

list.add(populateAllIn(genericClass));

field.set(target, list);

}

} else if ((isSimpleType(fieldType) || isSimplePrimitiveWrapperType(fieldType)) && !fieldType.isEnum()) {

field.set(target, getManufacturedPojo(fieldType));

} else if (!fieldType.isEnum()) {

field.set(target, populateAllIn(fieldType));

}

}

return target;

}

和一些辅助方法。 代码可能并不完美,但是可以工作:)。

private Class> getGenericClass(final Field field) {

final ParameterizedType collectionType = (ParameterizedType) field.getGenericType();

return (Class>) collectionType.getActualTypeArguments()[0];

}

private boolean isSimpleType(final Class> fieldType) {

return fieldType.isPrimitive()

|| fieldType.isEnum()

|| String.class.isAssignableFrom(fieldType)

|| Date.class.isAssignableFrom(fieldType);

}

private boolean isSimplePrimitiveWrapperType(final Class> fieldType) {

return Integer.class.isAssignableFrom(fieldType)

|| Boolean.class.isAssignableFrom(fieldType)

|| Character.class.isAssignableFrom(fieldType)

|| Long.class.isAssignableFrom(fieldType)

|| Short.class.isAssignableFrom(fieldType)

|| Double.class.isAssignableFrom(fieldType)

|| Float.class.isAssignableFrom(fieldType)

|| Byte.class.isAssignableFrom(fieldType);

}

谢谢,如果有更简单的方法来填充所有内容,请告诉我。

java自动填充_java-自动使用随机数据填充原始属性?相关推荐

  1. java 包装类缺点_Java 自动拆箱和自动装箱学习笔记

    Java 自动拆箱和自动装箱学习笔记 详情参考以下 1. 概述 Java 中的自动装箱和自动拆箱算是一种语法糖,也就是在编译阶段编译器在合适的情况下帮我们的做了自动拆箱和自动装箱. 众所周知,Java ...

  2. java 内存分布_java的各类型数据在内存中分配情况详解_

    1. 有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构.说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出,此说法不虚,但掌握Jav ...

  3. java jdbc 批处理_Java JDBC批处理插入数据操作

    在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...

  4. java 拆箱_Java自动装箱拆箱

    一.装箱.拆箱定义 如果一个int型量被传递到需要一个Integer对象的地方,那么,编译器将在幕后插入一个对Integer构造方法的调用,这就叫做自动装箱.而如果一个Integer对象被放到需要in ...

  5. java自动封箱_java自动封箱是什么意思

    3 Autoboxing and Unboxing 自动装箱与解箱 3.1 Converting Primitives to Wrapper Types 看一下代码 int foo = 0; Inte ...

  6. java 自动编译_java自动编译批处理

    最近开始学习java 教程中用的是dos命令行环境, 每次都要输入一大堆命令 比较繁琐 (据说命令行方式是新手必须要掌握的 , 但我认为重复输入那几个命令是万万没有必要的 ) 所以就写了个批处理来完成 ...

  7. java double 装箱_Java自动拆箱和装箱

    一.什么是装箱/拆箱 在讲之前,得先提一下为什么两个概念:基本数据类型及其包装类,我们都知道Java是一种面向对象的语言,但是Java中的基本数据类型是不面向对象的,这时在使用中便会存在诸多的不便,为 ...

  8. java apidoc案例_java 自动生成api 文档 :apidoc

    官网:apidocjs 首先声明下,apidoc是基于注释来生成文档的,它不基于任何框架,而且支持大多数编程语言,适用于java项目.跟已有的项目框架没有任何关系 一.apidoc简介 apidoc通 ...

  9. java word模版填充_java向word模板中填充数据(总结)

    使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...

  10. java imageicon大小_Java 自动缩放ImageIcon到标签大小

    小编典典 这是一个棘手的问题.你强调了一个事实,即你正在使用a JLabel来显示图像,这是标准的处理方式,但是却JLabel是一个复杂的小野兽,具有文本,图标以及文本的对齐和定位. 如果你不需要所有 ...

最新文章

  1. HTML5中常用的标签(及标签的属性和作用)
  2. Echarts使用笔记
  3. @onetoone中被控表不能做自我删除吗?_儿童生活自律表,孩子总是不能坚持,那是因为父母犯了这4个错误...
  4. android 二次绘制 layout,View的三次measure,两次layout和一次draw
  5. 作风和个性特点伪原创工具
  6. 如何让html引用公共的头部和尾部(多个html文件公用一个header.html和footer.html)
  7. 关于FileAttributes
  8. 看看华为 Java 编程的军规...
  9. Akka 2 Actor 源码
  10. ewebeditor for php任意文件上传漏洞
  11. Chm 文件资源编辑软件
  12. 5基于matplotlib的python数据可视化——导入Excel数据制作折线图
  13. haskell学习笔记(7)-高阶函数Curried functions
  14. 5G(NR)网络中的SRB定义和类型
  15. 苹果手机系统更新信号无服务器,苹果手机经常显示无信号该如何解决你会吗?...
  16. Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'. Job fai
  17. 第一次用idea写SSM框架的项目就遇到自动注入失败的问题
  18. 从12个球任取8个球
  19. 在线身份证号码提取生日工具
  20. 数据结构 实验一 熟悉C++的编程环境

热门文章

  1. Spring JDBC 【继承JdbcDaoSupport】
  2. PowerDesigner 15 概述
  3. 深度学习样本标完后图片增强标签内容不变
  4. 20200615每日一句
  5. 181004有道扇贝每日一句
  6. Atitit 提升记忆的稳定性防止遗忘 目录 1. 存储稳定性(记忆牢固性),需要多处存储,提升稳定性 1 2. 方法分类原则 2 2.1. 常复习 2 2.2. 复习方法多样化 利用多种感官 2
  7. Atitit 异常机制与异常处理的原理与概论
  8. Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列
  9. paip. c++ doxygen 文档工具的使用以及跟QT CREATOR的集成
  10. paip.若只如初见——WEB或BS开发必备基础知识