Java 如何填写课堂上的所有字段?
假设我有一个类,它有很多不同的字段。这个类是一个DTO,出于测试目的,我不关心实际值,只关心它的存在。是否有任何工具可以遍历所有字段并设置原语,0表示数字(0.0表示浮点,Double,0表示整数,0L表示长,但默认不为空),类似于字符串的“test”之类的东西 此外,我希望该工具能够填充集合(列表、集合、映射) 是否有任何工具可以遍历所有字段并设置原语,0表示数字(0.0表示浮点,Double表示整数,0表示长,但默认不为空),类似于字符串的“test”之类的东西?我还希望该工具能够填充集合(列表、集合、映射) 顺便说一句,没有什么能比用简单的方法省去你太多的精力。使用初始值设定项声明字段,或者在构造函数中执行一些简单的默认初始化,这是一件小事Java 如何填写课堂上的所有字段?,java,Java,假设我有一个类,它有很多不同的字段。这个类是一个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()
应显示值。如果使用原语而不是包装器是一个选项,则字段将初始化为默认指定的值。如果我们可以看到某种示例代码片段,那就太好了。