如何填写班级中的所有字段?

时间:2013-08-15 10:08:14

标签: java

假设我有一个包含许多不同字段的类。这个类是DTO,出于测试目的,我不关心实际值,只是它存在。是否有任何工具可以遍历所有字段并设置基元,0表示Number(0.0表示Float,Double,0表示整数,0L表示Long,但默认情况下不为null),类似于“test”for String?

另外,我希望该工具填充集合(列表,集,地图)。

5 个答案:

答案 0 :(得分:6)

只是一个小小的谷歌搜索提供了这个结果:

否则你可以使用反射来填充:

  • 原始/包装器,默认值为
  • 带有rendom值的字符串
  • 随机大小的集合(设置,列表)并重复使用代码 填充

    依旧。

其他XML绑定(使用jaxb或其他技术)可以是一个选项,但需要提前准备xml数据。
除了框架之外,所有其他解决方案都有两大问题:需要编写和大量测试!

答案 1 :(得分:0)

  

是否有任何工具可以遍历所有字段并设置基元,0表示Number(0.0表示Float,Double,0表示整数,0L表示Long,但默认情况下不为null),类似于“test”表示String?此外,我希望该工具填充集合(列表,集,地图)。

AFAIK,没有任何东西会以简单的方式为您节省很多精力。使用初始化程序声明字段或在构造函数中进行一些简单的默认初始化是一件小事。

使用原始类型而不是包装类型可能是个好主意;例如int而非Integer。一个优点是具有基本类型的字段默认初始化为00.0false ...为您节省了麻烦。

答案 2 :(得分:0)

使用Introspector.getBeanInfo(object.getClass())。getPropertyDescriptors()在一个小循环中编写一个方法,根据需要填充字段。您可以递归调用此方法来填充类,集合等。

其他方式是使用JAXB,XStream或Abraxas进行XML反序列化。

答案 3 :(得分:0)

您可以通过反射获取字段的类型,然后使用反射将其初始化为您想要的任何内容。

public static void main(String[] args) {
        MyDTO myDTO = new MyDTO();
        Field [] fields = myDTO.getClass().getDeclaredFields();
        for (Field field: fields){
            if (field.getType().equals(Integer.TYPE)){
                //Primitives are already initialized to 0, so no need to do anything.
            }else if (field.getType().equals(String.class)){
                System.out.println("String");
                //Invoke setter method with reflection, initialize to ""
            }
        }
    }

答案 4 :(得分:0)

如果您使用的是基元,它们将自动设置为默认值。对于Wrapper calss,如果您不关心实际值,则可以将它们保留为null。如果在未初始化它们的情况下访问它们,则可以抛出NullPointerException。

为了在列表中填充它,最简单的方法应该是创建一个类对象并将对象添加到列表中。

class DTO
{
  int a;
  String b;
  float c;
 DTO (int a,String b,float c)
   {
     this.a=a;
     this.b=b;
     this.c=c;
   }
public static void main (String args[])

  {
      List <DTO> list = new ArrayList<DTO>();
      DTO o = new DTO (1,"Test",11.3f);
      list.add(o);
   }
}

打印列表并覆盖toString()应显示值。