如何在Java反射中隐藏子模型类的属性名称

时间:2019-01-28 03:55:59

标签: java reflection

我有一个很大的模型类,我想为此模型创建一个toString方法。但是此模型有很多领域,因此我尝试使用Common模型和Java反射。但是输出是include子模型字段名称,是否可以删除它?

我有1个抽象模型类,如下所示:

import java.lang.reflect.*;

public abstract class CommonEntity {

  public String getInsertString() {
    StringBuilder sb = new StringBuilder();
    try {
      Field[] fields = this.getClass().getDeclaredFields();

      for (Field field : fields) {

        field.setAccessible(true);        

        Object value = field.get(this);
        if (value != null) {          
          sb.append("\"" + value.toString() + "\",");
        }

      }

    } catch (Exception e) {
      System.out.println(e);
    }
    return sb.toString();
  }

}

另外2个模型扩展了这一通用性

测试:

@Data
public class test extends CommonEntity {
  private String name;
  private String last;
  private test2 test;
}

test2:

@Data
public class test2 extends CommonEntity {
  private String name2;
  private String last2;
}

主要班级:

public static void main(String[] args) {
    test a = new test();
    a.setName("1");
    a.setLast("2");

    test2 b = new test2();
    b.setLast2("3");
    b.setName2("4");
    a.setTest(b);

    System.out.println(a.getInsertString());

}

控制台输出:

"1","2","test2(name2=4, last2=3)",

我的期望:

"1","2","4","3,

是否可以删除

test2(name2

last2

输出。

1 个答案:

答案 0 :(得分:0)

输出的那部分来自lombok's @Data自动生成的toString。如果您不想要它,请实现自己的toString函数。

但是我对此实现方式有疑问,结果字符串表示形式的预期用途是什么?从您的措辞来看,我担心您打算将其用作SQL查询的一部分,这是不明智的。