Java 如何填写课堂上的所有字段?

Java 如何填写课堂上的所有字段?,java,Java,假设我有一个类,它有很多不同的字段。这个类是一个DTO,出于测试目的,我不关心实际值,只关心它的存在。是否有任何工具可以遍历所有字段并设置原语,0表示数字(0.0表示浮点,Double,0表示整数,0L表示长,但默认不为空),类似于字符串的“test”之类的东西 此外,我希望该工具能够填充集合(列表、集合、映射) 是否有任何工具可以遍历所有字段并设置原语,0表示数字(0.0表示浮点,Double表示整数,0表示长,但默认不为空),类似于字符串的“test”之类的东西?我还希望该工具能够填充集合(

假设我有一个类,它有很多不同的字段。这个类是一个DTO,出于测试目的,我不关心实际值,只关心它的存在。是否有任何工具可以遍历所有字段并设置原语,0表示数字(0.0表示浮点,Double,0表示整数,0L表示长,但默认不为空),类似于字符串的“test”之类的东西

此外,我希望该工具能够填充集合(列表、集合、映射)

是否有任何工具可以遍历所有字段并设置原语,0表示数字(0.0表示浮点,Double表示整数,0表示长,但默认不为空),类似于字符串的“test”之类的东西?我还希望该工具能够填充集合(列表、集合、映射)

顺便说一句,没有什么能比用简单的方法省去你太多的精力。使用初始值设定项声明字段,或者在构造函数中执行一些简单的默认初始化,这是一件小事


使用基本类型而不是包装类型可能是一个好主意;e、 g.
int
而不是
Integer
。一个优点是具有基本类型的字段默认初始化为
0
0.0
false
。。。省去您的麻烦。

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


另一种方法是使用JAXB、XStream或Abraxas进行XML反序列化。

只需在谷歌上搜索一下即可获得以下结果:

  • 简单易用的现代java解决方案,以前称为随机bean
  • 对于Java6,以前称为JPopulator
  • 带着
否则,您可以使用反射来填充:

  • 具有默认值的原语/包装器
  • 具有rendom值的字符串
  • 集合(集合、列表)
    具有随机大小并重新使用代码 填充
等等。

否则,XML绑定(使用jaxb或其他技术)可能是一种选择,但需要提前准备带有数据的XML。

除了框架,所有其他解决方案都有两个大问题:需要编写和大量测试

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

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 ""
            }
        }
    }

如果您使用的是基本体,它们将自动设置为默认值。对于包装计算,如果您不关心实际值,则可以将它们保留为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);
   }
}
classdto
{
INTA;
b串;
浮点数c;
DTO(整数a、字符串b、浮点c)
{
这个a=a;
这个.b=b;
这个.c=c;
}
公共静态void main(字符串参数[])
{
列表=新的ArrayList();
DTO=新的DTO(1,“测试”,11.3f);
列表。添加(o);
}
}

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

如果使用原语而不是包装器是一个选项,则字段将初始化为默认指定的值。如果我们可以看到某种示例代码片段,那就太好了。