Java迭代类字段以创建其他类
我有一门课是这样的:Java迭代类字段以创建其他类,java,Java,我有一门课是这样的: public class Example { private String a; private Integer b; private Boolean c; private List<AnotherClass> d; } [ { name: "a", value: "a value" }, { name: "b", value: "1",
public class Example {
private String a;
private Integer b;
private Boolean c;
private List<AnotherClass> d;
}
[
{
name: "a",
value: "a value"
},
{
name: "b",
value: "1",
},
{
name: "c",
value: "true",
}
]
public class Test {
private String name;
private String value;
}
因此,我创建了这样一个类:
public class Example {
private String a;
private Integer b;
private Boolean c;
private List<AnotherClass> d;
}
[
{
name: "a",
value: "a value"
},
{
name: "b",
value: "1",
},
{
name: "c",
value: "true",
}
]
public class Test {
private String name;
private String value;
}
我希望有一个方法来迭代
示例
类,这样它将生成测试
类,而不包括d
属性。如何实现这一点?您需要在classExample
中有一些合适的getter,在classTest
中有一个合适的构造函数来初始化对象实例变量,如
public Test (String name, int value) {
this.name = name;
this.value = value'
}
然后,对于类示例的每个实例(假设数组或列表中有多个实例),可以迭代它们,通过getter方法检索所需的值,并为每个实例初始化一个测试对象,例如
List<Test> yourListOfTestInstances = new ArrayList<>();
for (Example exampleObject : yourExampleObjectsListOrArray) {
yourListOfTestInstances.add(new Test(exampleObject.getA() , exampleObject.getB()));
}
List yourListOfTestInstances=newarraylist();
例如(示例exampleObject:yourExampleObjectsListOrArray){
添加(新测试(exampleObject.getA(),exampleObject.getB());
}
然后,对于ArrayList中创建的每个测试实例,您可以根据需要轻松构建JSON(尽管我不完全理解您为什么需要这个中间测试类来实现这一点)这是您可以轻松实现的。在下面的示例中,我将类
Test
重命名为Property
,因为它代表一个键值对。如果您乐于使用toString()
返回的值作为字段的值,那么解决方案非常简单:
public class Property {
private final String name;
private final String value;
public Property(String name, String value) {
this.name = name;
this.value = value;
}
public static List<Property> toProperties(Object object, String... fieldNames)
throws ReflectiveOperationException
{
ArrayList<Property> properties = new ArrayList<>();
for( String fieldName : fieldNames ) {
Field field = object.getClass().getDeclaredField(fieldName);
properties.add(new Property(fieldName, field.get(object).toString()));
}
return properties;
}
public String toString() {
return String.format("%s: \"%s\"", name, value);
}
}
公共类属性{
私有最终字符串名;
私有最终字符串值;
公共属性(字符串名称、字符串值){
this.name=名称;
这个值=值;
}
公共静态列表TopProperty(对象、字符串…字段名)
抛出反射操作异常
{
ArrayList属性=新的ArrayList();
for(字符串字段名:字段名){
Field=object.getClass().getDeclaredField(fieldName);
add(新属性(fieldName,field.get(object.toString()));
}
归还财产;
}
公共字符串toString(){
返回字符串。格式(“%s:\%s\”,名称,值);
}
}
此示例要求您明确指定所需字段的名称,例如:
List<Property> properties = Property.toProperties(myExample, "a", "b", "c");
List properties=Property.toproperty(我的示例是“a”、“b”、“c”);
如果您希望根据某些标准自动检测字段(例如所有的原语和<代码>字符串< /代码>类型字段,那么您可以在<代码>中添加这个逻辑到属性< /代码>,并去掉VARARGS。您可以考虑使用GSON或杰克逊将对象列表转换为JSON。