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
属性。如何实现这一点?

您需要在class
Example
中有一些合适的getter,在class
Test
中有一个合适的构造函数来初始化对象实例变量,如

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。