目录

  • 背景说明
  • 代码编写
  • 依赖
  • 代码
  • 结果
  • 使用


背景说明

最近手头一个项目快结束了,所以需要编写一个公司内部的详细设计说明书.docx,在编写过程中,我需要对每个Service接口生成下面的表格

系统java辅助 设置 java写辅助_方法参数

如果全部手动完成,那会面临如下几个问题:

  1. 一个个复制粘贴会导致手累的要命(重要)
  2. 方法参数上面携带的还有注解,所以在复制方法参数的时候还需要去除注解
  3. 将文字从IDEA复制到Word中,将会遇到文字格式不一样的情况,还需要手动去更改文字格式,即使使用格式刷全部刷新,也是有问题的,因为每次复制之后文字后面就会多一个回车符,我们还需要手动去删除,太麻烦了

综上所述,我不能忍受这种情况,接下来我将说出我的解决办法,这些信息都是来自于类或者接口中,因此我们完全可以把它们单独摘出来,然后选中Word中对应的列,直接粘贴进去就可以了,如下:

系统java辅助 设置 java写辅助_方法参数_02

代码编写

依赖
<dependency>
    <groupId>com.thoughtworks.qdox</groupId>
    <artifactId>qdox</artifactId>
    <version>2.0.0</version>
</dependency>
代码
import com.thoughtworks.qdox.JavaProjectBuilder;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaMethod;
import com.thoughtworks.qdox.model.JavaParameter;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

public class Test2 {

    public static void main(String[] args) {
        // java文件绝对路径(类 / 接口均可)
        String absolutePath = "G:\\gitlab\\item\\wiki\\kms-wiki\\kms-wiki\\src\\main\\java\\com\\leadal\\kms\\wiki\\service\\KItemPreDeletionService.java";
        JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder();
        // 设置编码方式
        javaProjectBuilder.setEncoding(StandardCharsets.UTF_8.name());
        // 存储方法名称集合
        List<String> methodNameList = new ArrayList<>();
        // 存储方法参数集合
        List<String> paramNameList = new ArrayList<>();
        // 存储方法返回值集合
        List<String> returnNameList = new ArrayList<>();
        // 添加解析文件
        javaProjectBuilder.addSourceTree(new File(absolutePath));
        for (JavaClass aClass : javaProjectBuilder.getClasses()) {
            // 解析类 / 接口中的方法
            for (JavaMethod method : aClass.getMethods()) {
                // 方法名称
                String methodName = method.getName();
                // 方法返回值名称
                String returnName = method.getReturnType().getValue();
                // 存储经过处理的方法参数
                List<String> methodParamNameList = new ArrayList<>();
                // 所有方法参数集合
                List<JavaParameter> parameters = method.getParameters();
                for (JavaParameter parameter : parameters) {
                    // 类型
                    String type = parameter.getType().getValue();
                    // 名称
                    String name = parameter.getName();
                    // 处理并填充方法参数
                    methodParamNameList.add(type + " " + name);
                }
                // 添加数据
                methodNameList.add(methodName);
                paramNameList.add(methodParamNameList.size() > 0 ? String.join(", ", methodParamNameList) : "无");
                returnNameList.add(returnName);
            }
        }
        // 输出方法数量
        System.out.println("方法数量:" + methodNameList.size());
        // 输出方法名称集合
        System.out.println("》》》》》》》》》》》方法名称《《《《《《《《《《《");
        for (String methodName : methodNameList) {
            System.out.println(methodName);
        }
        // 输出方法参数列表
        System.out.println("》》》》》》》》》》》方法参数《《《《《《《《《《《");
        for (String paramName : paramNameList) {
            System.out.println(paramName);
        }
        // 输出方法返回值列表
        System.out.println("》》》》》》》》》》》返回值《《《《《《《《《《《");
        for (String returnName : returnNameList) {
            System.out.println(returnName);
        }
    }
}
结果
方法数量:5
》》》》》》》》》》》方法名称《《《《《《《《《《《
preDeleteKItem
getPreDeleteKItemList
deleteKItem
getAlreadyDeleteKItemList
recoverKItem
》》》》》》》》》》》方法参数《《《《《《《《《《《
String kItemId
Integer currentPage, Integer pageSize, String keyword
String kItemId, Boolean flag
Integer currentPage, Integer pageSize, String keyword
String kItemId
》》》》》》》》》》》返回值《《《《《《《《《《《
ResultUtils
ResultUtils
ResultUtils
ResultUtils
ResultUtils
使用

我们可以根据返回值中的数量来创建Word中表格的行数,我们以方法名称举例,上面的方法数量是5,我们只需要把Word表格中的空白行数设置为5,然后选择上面输出结果中的方法名称,即:

preDeleteKItem
getPreDeleteKItemList
deleteKItem
getAlreadyDeleteKItemList
recoverKItem

之后在Word选中所有空白行的第一列执行粘贴操作即可,最终效果如下:

系统java辅助 设置 java写辅助_IDEA_03