使用Javapoet生成代码

最近写接口平台,根据xml写对应的类,大量重复代码,粘贴复制,简单学习了javapoet,写了个生成代码的小玩意儿,宗旨是减少重复代码占据你学习的时间


详细文档方法移步官方Github,几乎覆盖所有场景   https://github.com/square/javapoet


 

xml解析

首先根据 xml 解析出对应的类,这里做的是 忽略报文头,行解析,每一行都被人作为一个对象的属性

package com.ticup.business.generate.create;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * xml 解析类
 *
 * @author chenhao
 * @version 1.0.0
 * @since 1.0.0
 *
 * Created at 2019-11-06 10:47
 */
public class XmlParser {
  public Map<String, List<JavaFieldModel>> parser(String xml, String className)
      throws IOException, ClassNotFoundException {
    Map<String, List<JavaFieldModel>> result = new HashMap<>();
    List<JavaFieldModel> list = new ArrayList<>();
    List<JavaFieldModel> listModel;
    boolean inRequest = false;
    boolean inList = false;
    boolean endList = false;
    String startListName = null;

    StringBuilder listSb = new StringBuilder();
    // 忽略报文头
    BufferedReader bfr = new BufferedReader(
        new InputStreamReader(new ByteArrayInputStream(xml.getBytes())));
    String s;

    while ((s = bfr.readLine()) != null && !s.equals("")) {
      s = s.trim();
      // 忽略报文头
      if (s.equals("<request>")) {
        inRequest = true;
        continue;
      }
      if (s.equals("</request>")) {
        inRequest = false;
      }
      // 逐行解析报文体

      // 没有结尾标签,代表开始一个列表了
      if (inRequest && !s.contains("</") && !inList) {
        inList = true;
        startListName = s.substring(1, s.length() - 1);
      }
      // 解析 list 列表
      if (inList && inRequest) {
        listSb.append(s + "\n");
      }

      // 列表结束
      if (startListName != null && !startListName.equals("") && s.contains("</" + startListName)) {
        inList = false;
        endList = true;
      }
      if (endList == true) {
        // 调用 列表解析
        listModel = parserList(listSb.toString(), startListName);
        result.put(startListName, listModel);
        endList = false;
        listSb = new StringBuilder();
        startListName = null;
        continue;
      }
      // 解析一般属性
      if (inRequest && !inList) {
        JavaFieldModel model = parserLine(s);
        list.add(model);
      }

    }
    result.put(className, list);
    return result;
  }

  // 解析list
  private List<JavaFieldModel> parserList(String toString, String listName)
      throws IOException, ClassNotFoundException {
    List<JavaFieldModel> list = new ArrayList<>();
    BufferedReader bfr = new BufferedReader(
        new InputStreamReader(new ByteArrayInputStream(toString.getBytes())));
    bfr.readLine();
    String s;
    while ((s = bfr.readLine()) != null && !s.equals("")) {
      if (s.contains("Row") || s.contains(listName)) {
        continue;
      }
      JavaFieldModel model = parserLine(s);
      list.add(model);
    }

    return list;
  }


  // 行解析
  public JavaFieldModel parserLine(String line) throws ClassNotFoundException {
    JavaFieldModel model = new JavaFieldModel();
    line = line.trim();
    // 去掉行首尖括号
    String source = line.substring(1);
    // 截取字段名
    int i = source.indexOf(">");
    String name = source.substring(1, i);
    model.setName(name);

    // 截取注释
    int begin = source.indexOf(">");
    int end = source.indexOf("</");
    String comment = source.substring(begin + 1, end);
    model.setComment(comment);

    // 截取特殊字段类型
    int typeIndex = source.lastIndexOf(">");
    String type = source.substring(typeIndex + 1);
    if (!type.equals("")) {
      model.setClazz(Class.forName(type));
    } else {
      model.setClazz(String.class);
    }

    return model;
  }



}
package com.ticup.business.generate.create;

/**
 * 每一行xml 对应的属性
 *
 * @author chenhao
 * @version 1.0.0
 * @since 1.0.0
 *
 * Created at 2019-11-06 10:46
 */
public class JavaFieldModel {
  // 属性名称
  private String name;
  // 属性类型
  private Class<?> clazz;
  // 属性注释
  private String comment;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Class<?> getClazz() {
    return clazz;
  }

  public void setClazz(Class<?> clazz) {
    this.clazz = clazz;
  }

  public String getComment() {
    return comment;
  }

  public void setComment(String comment) {
    this.comment = comment;
  }

  @Override
  public String toString() {
    return "JavaFieldModel{" +
        "name='" + name + '\'' +
        ", clazz=" + clazz +
        ", comment='" + comment + '\'' +
        '}';
  }

}

 

生成java类

然后 根据 xml 解析出来的数据进行 java类生成

package com.ticup.business.generate.create;

import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.MethodSpec;
import java.util.ArrayList;
import java.util.List;
import javax.lang.model.element.Modifier;

/**
 * java生成
 *
 * @author chenhao
 * @version 1.0.0
 * @since 1.0.0
 *
 * Created at 2019-11-06 10:47
 */
public class JavaGenerate {

  /**
   * 根据 字段集合 构造所有的 私有字段.
   *
   * @param javaFieldModels xml解析出来的字段集合
   * @return 构造好的字段
   */
  public List<FieldSpec> generateField(List<JavaFieldModel> javaFieldModels) {
    FieldSpec fieldSpec;
    List<FieldSpec> result = new ArrayList<>();
    for (JavaFieldModel model : javaFieldModels) {
      // 构建类型
      fieldSpec = FieldSpec.builder(model.getClazz(), model.getName(), Modifier.PRIVATE)
          .addJavadoc(model.getComment() + ".\n")
          .build();
      result.add(fieldSpec);
    }
    return result;
  }


  /**
   * 根据字段生成 get set 方法.
   *
   * @param fieldSpecList 字段
   * @return 生成的方法合集
   */
  public List<MethodSpec> generateGetSetMethod(List<FieldSpec> fieldSpecList) {
    List<MethodSpec> result = new ArrayList<>();
    MethodSpec methodSpec;
    for (FieldSpec fieldSpec : fieldSpecList) {
      String name = GenerateUtil.upper(fieldSpec.name);
      methodSpec = MethodSpec.methodBuilder("get" + name)
          .addModifiers(Modifier.PUBLIC)
          .returns(fieldSpec.type)
          .addStatement("return " + fieldSpec.name)
          .build();
      result.add(methodSpec);

      methodSpec = MethodSpec.methodBuilder("set" + name)
          .addModifiers(Modifier.PUBLIC)
          .addParameter(fieldSpec.type, fieldSpec.name)
          .addStatement("this." + fieldSpec.name + "=" + fieldSpec.name)
          .build();
      result.add(methodSpec);

    }
    return result;
  }


  /**
   * 根据字段生成 toString 方法
   *
   * @param fieldSpecList 字段集合
   * @return 返回toString 方法
   */
  public MethodSpec generateToString(List<FieldSpec> fieldSpecList, String className) {
    StringBuilder sb = new StringBuilder();
    sb.append("return " + "\"" + className + "{\"" + " +\n" + "\"");
    for (int i = 0; i < fieldSpecList.size(); i++) {
      sb.append(fieldSpecList.get(i).name + "= \'\"" + " + "
          + fieldSpecList.get(i).name + " +'\\\''" + " + ");
      if (i != fieldSpecList.size() - 1) {
        sb.append("\n" + "\",");
      } else {
        sb.append("\'}\'");
      }

    }

    MethodSpec toString = MethodSpec.methodBuilder("toString")
        .addModifiers(Modifier.PUBLIC)
        .returns(String.class)
        .addAnnotation(Override.class)
        .addStatement(sb.toString()).build();

    return toString;
  }

}

package com.ticup.business.generate.create;

/**
 * TODO
 *
 * @author chenhao
 * @version 1.0.0
 * @since 1.0.0
 *
 * Created at 2019-11-06 10:46
 */
public class GenerateUtil {

  public static String upper(String target) {
    String start = target.substring(0, 1).toUpperCase();
    String after = target.substring(1);
    return start + after;
  }

}

测试

package com.ticup.business.generate.create;

import static javax.lang.model.element.Modifier.PUBLIC;
import static org.junit.jupiter.api.Assertions.*;

import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeSpec.Builder;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.junit.jupiter.api.Test;

/**
 * TODO
 *
 * @author chenhao
 * @version 1.0.0
 * @since 1.0.0
 *
 * Created at 2019-11-06 14:28
 */
class XmlParserTest {

  @Test
  public void parser() throws IOException, ClassNotFoundException {
    XmlParser xmlParser = new XmlParser();
    String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
        + "<transaction>\n"
        + "  <header>\n"
        + "    <ver>1.0</ver>\n"
        + "    <msg>\n"
        + "      <msgCd>FAS.OB0050000.01</msgCd>\n"
        + "      <seqNb>CBS201910240000001</seqNb>\n"
        + "      <sndAppCd>CBS</sndAppCd>\n"
        + "      <sndDt>20191024</sndDt>\n"
        + "      <sndTm>171100</sndTm>\n"
        + "      <rcvAppCd>FAS</rcvAppCd>\n"
        + "    </msg>\n"
        + "  </header>\n"
        + "  <body>\n"
        + "    <request>\n"
        + "      <linkBillNo>编号</linkBillNo>\n"
        + "      <bizFlowNo>biz号</bizFlowNo>\n"
        + "      <newCustomerNo>新建人账号</newCustomerNo>\n"
        + "      <newCustomerName>新建人名称</newCustomerName>\n"
        + "      <projectDisposeNo>处置项目编号</projectDisposeNo>\n"
        + "      <projectDisposeName>处置项目名称</projectDisposeName>\n"
        + "      <billingType>类型</billingType>\n"
        + "      <fundCode>fcode</fundCode>\n"
        + "      <recoverDate>日期</recoverDate>\n"
        + "      <operatorName>operator</operatorName>\n"
        + "      <operatorInstitute>operins</operatorInstitute>\n"
        + "      <operatorDepartment>operdep</operatorDepartment>\n"
        + "      <bizDate>biz日期</bizDate>\n"
        + "      <cashRecoverList>\n"
        + "        <Row>\n"
        + "          <newDebtContract>ndc</newDebtContract>\n"
        + "          <newRecoverAmount>金额1</newRecoverAmount>\n"
        + "          <newRcReturnPrincipal>金额1</newRcReturnPrincipal>\n"
        + "          <newRcReturnInnerInt>金额1</newRcReturnInnerInt>\n"
        + "          <newRcReturnOuterInt>金额1</newRcReturnOuterInt>\n"
        + "          <newRcReturnFruits>金额1</newRcReturnFruits>\n"
        + "          <newIsPassRecover>金额1</newIsPassRecover>\n"
        + "          <newOverchargeAmt>金额1</newOverchargeAmt>\n"
        + "          <returnPrincipal>金额1</returnPrincipal>\n"
        + "          <returnInnerInt>金额1</returnInnerInt>\n"
        + "          <returnOuterInt>金额1</returnOuterInt>\n"
        + "          <returnFruits>金额1</returnFruits>\n"
        + "          <recoverCurrency>币种</recoverCurrency>\n"
        + "        </Row>\n"
        + "      </cashRecoverList>\n"
        + "      <npaFASAttachInfoList>\n"
        + "        <Row>\n"
        + "          <sid>xxxxxxxxxxxxxxxx</sid>\n"
        + "          <uploadDate>2019-10-22</uploadDate>\n"
        + "          <attachName>附件名称</attachName>\n"
        + "          <uploader>上传人</uploader>\n"
        + "          <attachType>TXT</attachType>\n"
        + "          <attachSize>10</attachSize>\n"
        + "          <path>path</path>\n"
        + "        </Row>\n"
        + "      </npaFASAttachInfoList>\n"
        + "    </request>\n"
        + "  </body>\n"
        + "</transaction>\n";

    Map<String, String> map = new HashMap<>();

    Map<String, List<JavaFieldModel>> demo = xmlParser.parser(xml, "demo");

    Set<Entry<String, List<JavaFieldModel>>> entries = demo.entrySet();

    JavaGenerate javaGenerate = new JavaGenerate();
    for (Entry<String, List<JavaFieldModel>> entry : entries) {
      // 最后生成base 主类模板
      if (!entry.getKey().equals("demo")) {
        List<FieldSpec> fieldSpecs = javaGenerate.generateField(entry.getValue());
        List<MethodSpec> methodSpecs = javaGenerate.generateGetSetMethod(fieldSpecs);
        MethodSpec methodSpec = javaGenerate.generateToString(fieldSpecs, entry.getKey());

        Builder builder = TypeSpec.classBuilder(entry.getKey());
        // 循环封装属性
        for (FieldSpec fieldSpec : fieldSpecs) {
          builder.addField(fieldSpec);
        }

        // 循环封装方法
        for (MethodSpec spec : methodSpecs) {
          builder.addMethod(spec);
        }
        TypeSpec build = builder.addMethod(methodSpec).build();
        //生成一个Java文件
        JavaFile javaFile = JavaFile.builder("com.xupt.willscorpio.javatest", build)
            .build();

        System.out.println(javaFile);
        map.put(entry.getKey(), javaFile.packageName);
      }
    }

    //--------------补充上列表属性------------
    // 生成主类模板
    List<JavaFieldModel> list = demo.get("demo");
    List<FieldSpec> fieldSpecs = javaGenerate.generateField(list);
    List<MethodSpec> methodSpecs = javaGenerate.generateGetSetMethod(fieldSpecs);
    Builder builderBase = TypeSpec.classBuilder("demo");
    // 循环封装属性
    for (FieldSpec fieldSpec : fieldSpecs) {
      builderBase.addField(fieldSpec);
    }
    // 循环封装方法
    for (MethodSpec spec : methodSpecs) {
      builderBase.addMethod(spec);
    }
    //---补充列表的 getter setter
    // 先构造一个list,然后构造一个泛型的类型
    ClassName className = ClassName.get("java.util", "List");
    Set<Entry<String, String>> entries1 = map.entrySet();
    MethodSpec methodSpec;
    for (Entry<String, String> stringStringEntry : entries1) {
      ClassName fanxing = ClassName.get(stringStringEntry.getValue(), stringStringEntry.getKey());
      // 泛型组装
      TypeName listOfHoverboards = ParameterizedTypeName.get(className, fanxing);
      builderBase
          .addField(FieldSpec.builder(listOfHoverboards, stringStringEntry.getKey()).build());

      String name = GenerateUtil.upper(stringStringEntry.getKey());
      methodSpec = MethodSpec.methodBuilder("get" + name)
          .addModifiers(PUBLIC)
          .returns(listOfHoverboards)
          .addStatement("return " + stringStringEntry.getKey())
          .build();
      builderBase.addMethod(methodSpec);

      methodSpec = MethodSpec.methodBuilder("set" + name)
          .addModifiers(PUBLIC)
          .addParameter(listOfHoverboards, name)
          .addStatement("this." + name + "=" + name)
          .build();
      builderBase.addMethod(methodSpec);

    }

    //生成一个Java文件
    JavaFile javaFile = JavaFile.builder("com.xupt.willscorpio.javatest", builderBase.build())
        .build();

    System.out.println(javaFile);
  }

}

 

输入报文:

<?xml version="1.0" encoding="utf-8"?>
<transaction>
  <header>
    <ver>1.0</ver>
    <msg>
      <msgCd>FAS.OB0050000.01</msgCd>
      <seqNb>CBS201910240000001</seqNb>
      <sndAppCd>CBS</sndAppCd>
      <sndDt>20191024</sndDt>
      <sndTm>171100</sndTm>
      <rcvAppCd>FAS</rcvAppCd>
    </msg>
  </header>
  <body>
    <request>
      <linkBillNo>编号</linkBillNo>
      <bizFlowNo>biz号</bizFlowNo>
      <newCustomerNo>新建人账号</newCustomerNo>
      <newCustomerName>新建人名称</newCustomerName>
      <projectDisposeNo>处置项目编号</projectDisposeNo>
      <projectDisposeName>处置项目名称</projectDisposeName>
      <billingType>类型</billingType>
      <fundCode>fcode</fundCode>
      <recoverDate>日期</recoverDate>
      <operatorName>operator</operatorName>
      <operatorInstitute>operins</operatorInstitute>
      <operatorDepartment>operdep</operatorDepartment>
      <bizDate>biz日期</bizDate>
      <cashRecoverList>
        <Row>
          <newDebtContract>ndc</newDebtContract>
          <newRecoverAmount>金额1</newRecoverAmount>
          <newRcReturnPrincipal>金额1</newRcReturnPrincipal>
          <newRcReturnInnerInt>金额1</newRcReturnInnerInt>
          <newRcReturnOuterInt>金额1</newRcReturnOuterInt>
          <newRcReturnFruits>金额1</newRcReturnFruits>
          <newIsPassRecover>金额1</newIsPassRecover>
          <newOverchargeAmt>金额1</newOverchargeAmt>
          <returnPrincipal>金额1</returnPrincipal>
          <returnInnerInt>金额1</returnInnerInt>
          <returnOuterInt>金额1</returnOuterInt>
          <returnFruits>金额1</returnFruits>
          <recoverCurrency>币种</recoverCurrency>
        </Row>
      </cashRecoverList>
      <npaFASAttachInfoList>
        <Row>
          <sid>xxxxxxxxxxxxxxxx</sid>
          <uploadDate>2019-10-22</uploadDate>
          <attachName>附件名称</attachName>
          <uploader>上传人</uploader>
          <attachType>TXT</attachType>
          <attachSize>10</attachSize>
          <path>path</path>
        </Row>
      </npaFASAttachInfoList>
    </request>
  </body>
</transaction>

解析后

package com.xupt.willscorpio.javatest;

import java.lang.Override;
import java.lang.String;

class npaFASAttachInfoList {
  /**
   * xxxxxxxxxxxxxxxx.
   */
  private String id;

  /**
   * 2019-10-22.
   */
  private String ploadDate;

  /**
   * 附件名称.
   */
  private String ttachName;

  /**
   * 上传人.
   */
  private String ploader;

  /**
   * TXT.
   */
  private String ttachType;

  /**
   * 10.
   */
  private String ttachSize;

  /**
   * path.
   */
  private String ath;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id=id;
  }

  public String getPloadDate() {
    return ploadDate;
  }

  public void setPloadDate(String ploadDate) {
    this.ploadDate=ploadDate;
  }

  public String getTtachName() {
    return ttachName;
  }

  public void setTtachName(String ttachName) {
    this.ttachName=ttachName;
  }

  public String getPloader() {
    return ploader;
  }

  public void setPloader(String ploader) {
    this.ploader=ploader;
  }

  public String getTtachType() {
    return ttachType;
  }

  public void setTtachType(String ttachType) {
    this.ttachType=ttachType;
  }

  public String getTtachSize() {
    return ttachSize;
  }

  public void setTtachSize(String ttachSize) {
    this.ttachSize=ttachSize;
  }

  public String getAth() {
    return ath;
  }

  public void setAth(String ath) {
    this.ath=ath;
  }

  @Override
  public String toString() {
    return "npaFASAttachInfoList{" +
        "id= '" + id +'\'' + 
        ",ploadDate= '" + ploadDate +'\'' + 
        ",ttachName= '" + ttachName +'\'' + 
        ",ploader= '" + ploader +'\'' + 
        ",ttachType= '" + ttachType +'\'' + 
        ",ttachSize= '" + ttachSize +'\'' + 
        ",ath= '" + ath +'\'' + '}';
  }
}

package com.xupt.willscorpio.javatest;

import java.lang.Override;
import java.lang.String;

class cashRecoverList {
  /**
   * ndc.
   */
  private String ewDebtContract;

  /**
   * 金额1.
   */
  private String ewRecoverAmount;

  /**
   * 金额1.
   */
  private String ewRcReturnPrincipal;

  /**
   * 金额1.
   */
  private String ewRcReturnInnerInt;

  /**
   * 金额1.
   */
  private String ewRcReturnOuterInt;

  /**
   * 金额1.
   */
  private String ewRcReturnFruits;

  /**
   * 金额1.
   */
  private String ewIsPassRecover;

  /**
   * 金额1.
   */
  private String ewOverchargeAmt;

  /**
   * 金额1.
   */
  private String eturnPrincipal;

  /**
   * 金额1.
   */
  private String eturnInnerInt;

  /**
   * 金额1.
   */
  private String eturnOuterInt;

  /**
   * 金额1.
   */
  private String eturnFruits;

  /**
   * 币种.
   */
  private String ecoverCurrency;

  public String getEwDebtContract() {
    return ewDebtContract;
  }

  public void setEwDebtContract(String ewDebtContract) {
    this.ewDebtContract=ewDebtContract;
  }

  public String getEwRecoverAmount() {
    return ewRecoverAmount;
  }

  public void setEwRecoverAmount(String ewRecoverAmount) {
    this.ewRecoverAmount=ewRecoverAmount;
  }

  public String getEwRcReturnPrincipal() {
    return ewRcReturnPrincipal;
  }

  public void setEwRcReturnPrincipal(String ewRcReturnPrincipal) {
    this.ewRcReturnPrincipal=ewRcReturnPrincipal;
  }

  public String getEwRcReturnInnerInt() {
    return ewRcReturnInnerInt;
  }

  public void setEwRcReturnInnerInt(String ewRcReturnInnerInt) {
    this.ewRcReturnInnerInt=ewRcReturnInnerInt;
  }

  public String getEwRcReturnOuterInt() {
    return ewRcReturnOuterInt;
  }

  public void setEwRcReturnOuterInt(String ewRcReturnOuterInt) {
    this.ewRcReturnOuterInt=ewRcReturnOuterInt;
  }

  public String getEwRcReturnFruits() {
    return ewRcReturnFruits;
  }

  public void setEwRcReturnFruits(String ewRcReturnFruits) {
    this.ewRcReturnFruits=ewRcReturnFruits;
  }

  public String getEwIsPassRecover() {
    return ewIsPassRecover;
  }

  public void setEwIsPassRecover(String ewIsPassRecover) {
    this.ewIsPassRecover=ewIsPassRecover;
  }

  public String getEwOverchargeAmt() {
    return ewOverchargeAmt;
  }

  public void setEwOverchargeAmt(String ewOverchargeAmt) {
    this.ewOverchargeAmt=ewOverchargeAmt;
  }

  public String getEturnPrincipal() {
    return eturnPrincipal;
  }

  public void setEturnPrincipal(String eturnPrincipal) {
    this.eturnPrincipal=eturnPrincipal;
  }

  public String getEturnInnerInt() {
    return eturnInnerInt;
  }

  public void setEturnInnerInt(String eturnInnerInt) {
    this.eturnInnerInt=eturnInnerInt;
  }

  public String getEturnOuterInt() {
    return eturnOuterInt;
  }

  public void setEturnOuterInt(String eturnOuterInt) {
    this.eturnOuterInt=eturnOuterInt;
  }

  public String getEturnFruits() {
    return eturnFruits;
  }

  public void setEturnFruits(String eturnFruits) {
    this.eturnFruits=eturnFruits;
  }

  public String getEcoverCurrency() {
    return ecoverCurrency;
  }

  public void setEcoverCurrency(String ecoverCurrency) {
    this.ecoverCurrency=ecoverCurrency;
  }

  @Override
  public String toString() {
    return "cashRecoverList{" +
        "ewDebtContract= '" + ewDebtContract +'\'' + 
        ",ewRecoverAmount= '" + ewRecoverAmount +'\'' + 
        ",ewRcReturnPrincipal= '" + ewRcReturnPrincipal +'\'' + 
        ",ewRcReturnInnerInt= '" + ewRcReturnInnerInt +'\'' + 
        ",ewRcReturnOuterInt= '" + ewRcReturnOuterInt +'\'' + 
        ",ewRcReturnFruits= '" + ewRcReturnFruits +'\'' + 
        ",ewIsPassRecover= '" + ewIsPassRecover +'\'' + 
        ",ewOverchargeAmt= '" + ewOverchargeAmt +'\'' + 
        ",eturnPrincipal= '" + eturnPrincipal +'\'' + 
        ",eturnInnerInt= '" + eturnInnerInt +'\'' + 
        ",eturnOuterInt= '" + eturnOuterInt +'\'' + 
        ",eturnFruits= '" + eturnFruits +'\'' + 
        ",ecoverCurrency= '" + ecoverCurrency +'\'' + '}';
  }
}

package com.xupt.willscorpio.javatest;

import java.lang.String;
import java.util.List;

class demo {
  /**
   * 编号.
   */
  private String inkBillNo;

  /**
   * biz号.
   */
  private String izFlowNo;

  /**
   * 新建人账号.
   */
  private String ewCustomerNo;

  /**
   * 新建人名称.
   */
  private String ewCustomerName;

  /**
   * 处置项目编号.
   */
  private String rojectDisposeNo;

  /**
   * 处置项目名称.
   */
  private String rojectDisposeName;

  /**
   * 类型.
   */
  private String illingType;

  /**
   * fcode.
   */
  private String undCode;

  /**
   * 日期.
   */
  private String ecoverDate;

  /**
   * operator.
   */
  private String peratorName;

  /**
   * operins.
   */
  private String peratorInstitute;

  /**
   * operdep.
   */
  private String peratorDepartment;

  /**
   * biz日期.
   */
  private String izDate;

  List<npaFASAttachInfoList> npaFASAttachInfoList;

  List<cashRecoverList> cashRecoverList;

  public String getInkBillNo() {
    return inkBillNo;
  }

  public void setInkBillNo(String inkBillNo) {
    this.inkBillNo=inkBillNo;
  }

  public String getIzFlowNo() {
    return izFlowNo;
  }

  public void setIzFlowNo(String izFlowNo) {
    this.izFlowNo=izFlowNo;
  }

  public String getEwCustomerNo() {
    return ewCustomerNo;
  }

  public void setEwCustomerNo(String ewCustomerNo) {
    this.ewCustomerNo=ewCustomerNo;
  }

  public String getEwCustomerName() {
    return ewCustomerName;
  }

  public void setEwCustomerName(String ewCustomerName) {
    this.ewCustomerName=ewCustomerName;
  }

  public String getRojectDisposeNo() {
    return rojectDisposeNo;
  }

  public void setRojectDisposeNo(String rojectDisposeNo) {
    this.rojectDisposeNo=rojectDisposeNo;
  }

  public String getRojectDisposeName() {
    return rojectDisposeName;
  }

  public void setRojectDisposeName(String rojectDisposeName) {
    this.rojectDisposeName=rojectDisposeName;
  }

  public String getIllingType() {
    return illingType;
  }

  public void setIllingType(String illingType) {
    this.illingType=illingType;
  }

  public String getUndCode() {
    return undCode;
  }

  public void setUndCode(String undCode) {
    this.undCode=undCode;
  }

  public String getEcoverDate() {
    return ecoverDate;
  }

  public void setEcoverDate(String ecoverDate) {
    this.ecoverDate=ecoverDate;
  }

  public String getPeratorName() {
    return peratorName;
  }

  public void setPeratorName(String peratorName) {
    this.peratorName=peratorName;
  }

  public String getPeratorInstitute() {
    return peratorInstitute;
  }

  public void setPeratorInstitute(String peratorInstitute) {
    this.peratorInstitute=peratorInstitute;
  }

  public String getPeratorDepartment() {
    return peratorDepartment;
  }

  public void setPeratorDepartment(String peratorDepartment) {
    this.peratorDepartment=peratorDepartment;
  }

  public String getIzDate() {
    return izDate;
  }

  public void setIzDate(String izDate) {
    this.izDate=izDate;
  }

  public List<npaFASAttachInfoList> getNpaFASAttachInfoList() {
    return npaFASAttachInfoList;
  }

  public void setNpaFASAttachInfoList(List<npaFASAttachInfoList> NpaFASAttachInfoList) {
    this.NpaFASAttachInfoList=NpaFASAttachInfoList;
  }

  public List<cashRecoverList> getCashRecoverList() {
    return cashRecoverList;
  }

  public void setCashRecoverList(List<cashRecoverList> CashRecoverList) {
    this.CashRecoverList=CashRecoverList;
  }
}


Process finished with exit code 0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值