项目背景:录接口数据。当时的原材料是Java源代码,产出是RAP文档。在可预见的未来,Controller代码中接收一个VO,返回一个VO。OK,就是这两个对象,我先把它们序列化成JSON,然后在RAP中导入。
过程中发现需要填各种数据类型的默认值。我们都知道,任何复杂的对象都是由基本数据类型构成的。所以,这个程序理想状态比较简单,只需要将VO的所有域中是基本数据类型的直接填值,其它类型递归处理。
但是,问题来了。数据集合类型中的域不是那么简单,size不能随意填,另外范性也需要特殊关照。所以,数据集合类型也扩充进来。
接着,问题又来了。我的小伙伴写的个别VO没那么单纯。所以也成了我的特殊关照类型。我当时的内心是这样的:
console.log('照这样下去,不会马上就……');
于是,我想到了开闭原则:只要对扩展是开放的就好了。
源代码地址
private List integerList; public static void main(String[] args) throws NoSuchFieldException { IntDefaultValueGenerator intDefaultValueGenerator = new IntDefaultValueGenerator(); ListDefaultValueGenerator listDefaultValueGenerator = new ListDefaultValueGenerator(); listDefaultValueGenerator.add(intDefaultValueGenerator); ChainedDefaultValueGenerator4Context root = new ChainedDefaultValueGenerator4Context(); root.add(listDefaultValueGenerator); root.add(intDefaultValueGenerator); Field integerList = Main.class.getDeclaredField("integerList"); root.set(new Context(integerList.getType(), integerList.getGenericType())); System.out.println(root.generate()); }
简单的描述这份代码: intDefaultValueGenerator 是一个基本处理单元, listDefaultValueGenerator 有着双重身份,对于 intDefaultValueGenerator 来说它是一个容器,对于 root 来说它也是一个基本处理单元。那么程序的输出是这样的。
GeneratedValue{suc=true, value=[1]} Process finished with exit code 0
相关推荐
- 在Name栏填入工程名称(例如:“HelloWorldApplet”),Directory栏设置为用户希望存放的目录(例如:“C:\jbproject\HelloWorldApplet”),Template使用默认值。 - 接受所有默认选项直至完成工程文件的创建。 ...
在 Eclipse 中,创建 AVD 需要选择 Windows > Android SDK and AVD Manager,然后点击 New,填入 Name,选择 Target 的 API,SD Card 大小任意,Skin 随便选,Hardware 目前保持默认值,然后点击 Create AVD 即可...
// 在此处填入代码以输出 "B 类的 test()方法" } } ``` 为了在控制台输出"B 类的 test()方法",我们可以采用以下几种方式: - 选项A: `A a = new B(); a.test();` - 选项D: `new B().test();` 这两个选项都可以...
例如,在新建某输入流对应的 BufferedInputStream 后,当我们通过 read() 读取输入流的数据时,BufferedInputStream 会将该输入流的数据分批填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据...
例如,如果`age`的默认值是20,那么在插入数据时没有提供`age`,它将自动填入默认值20(A)。 3. **JavaScript**:JavaScript是一种客户端脚本语言,可以在浏览器中执行(A),同时也支持在服务器端(例如Node.js...
创建DynamicWebProject,并在创建过程中填入项目基本信息。特别注意的是,Target runtime需要选择,Default Output Folder需要修改为WebRoot\WEB-INF\classes,并与WebRoot\WEB-INF\classes目录保持一致。Content ...
22. **SQL插入语句**:在插入记录时,如果省略了age值,那么默认值20会被自动填入。 以上是计算机二级等级考试中涉及的一些关键知识点,涵盖了Java编程、数据库设计、操作系统特性、Web开发、办公软件应用等多个...
7. Java 数据类型:Java的复合数据类型包括类、数组和接口,选项填入“接口”。简单数据类型包括数值类型、布尔类型和字符类型。 8. 数据库系统:数据库系统的特征是采用三级模式(外模式、模式和内模式)和两级...
用户只需在页面上添加相应的代码,就能在指定的输入框旁边生成一个下拉日历,用户可以轻松选择日期并自动填入输入框。这种插件的常见功能包括日期范围限制、预设日期、自定义格式化、禁用特定日期等,可以根据开发者...
Cron表达式是一种用于定时任务调度的特定格式字符串,它能够指定在特定时间运行的任务,广泛应用于Unix和类Unix系统中的crond守护进程以及Java等编程语言中。 1. Cron表达式的结构: Cron表达式由六或七个空格分隔...
正确答案是在下划线处填入“p=i”,将当前最小值的索引赋给p。 5. **SQL语言**:SQL是Structured Query Language的缩写,即结构化查询语言,用于数据库的管理和操作。 6. **pip工具**:pip是Python的包管理器,它...
最后,我们遍历`chessArr1`,将非零元素填入`sparseArr`。 输出稀疏数组后,我们还可以通过反向操作,从稀疏数组恢复原始二维数组。这通常涉及读取稀疏数组的第一行获取原数组的大小,然后遍历稀疏数组的其余部分,...
题目中的空白处应填入“接口”。 #### Java构造函数 - **知识点概述**:构造函数是一种特殊的方法,用于初始化对象的状态。 - **深入理解**:题目中的构造函数`A(int aa, int bb)`通过形参`aa`和`bb`初始化对象...
每个宫格内需要填入数字1到9,使得每行、每列以及每个小宫格内的数字都不重复。在这款"android数独游戏源码"中,我们可以学习到如何利用Android平台的编程技术来实现这样一个应用程序。 首先,我们需要了解Android...
- 创建Dynamic Web Project,填入项目基本信息,注意Target runtime选择。 - 修改DefaultOutputFolder,推荐为WebRoot\WEB-INF\classes,确保与WebRoot\WEB-INF\classes目录一致。 - 修改Content directory,推荐为...
正确答案填入了C++。 #### 14. PowerPoint 相册功能 - **知识点**: PowerPoint提供了多种功能来方便创建和编辑幻灯片。 - **题目解析**: 题目询问如何在PowerPoint中快速添加大量图片。正确答案D表示使用“相册”...
因此,此处应填入“表”或者“关系”,但由于题目未提供完整选项,此处无法给出确切答案。 以上是对2021-2022计算机二级等级考试试题的部分知识点解析,希望能帮助考生更好地理解和掌握相关知识点。
当用户选择一个建议时,`AutoCompleTextView`会自动填入所选值。 `AutoCompleTextView`的一些重要属性包括`android:completionThreshold`,它指定了用户必须输入多少个字符后才会触发自动完成,以及`android:...
7. **test.jsp文件中有如下一行代码:要使user对象可以作用于整个应用程序,应填入** - **结论**:正确答案为 **D**(application),表示整个应用范围。 #### SQL索引管理 8. **不能用于删除索引的命令** - **...
15. **HTML/JavaScript**:在网页中显示变量`name`的值,可以使用`<script>`标签内的JavaScript代码,如`document.write(name)`或`innerHTML`属性,题中应填入`document.write(name)`。 16. **单选按钮与复选框**:...