gpt4 book ai didi

java - 修剪复杂对象中的所有字符串元素

转载 作者:行者123 更新时间:2023-12-02 11:21:09 28 4
gpt4 key购买 nike

我可以编写一个通用方法来修剪复杂对象(包含其他对象的对象)中的所有字符串吗?应该使用java反射api来实现这个吗?谢谢。

我在下面提供了一个示例。但实际上,对象内可能有多个对象。每个对象可能包含 String 的集合或可能包含 String 的其他对象的集合。有没有办法修剪字符串 - 直接使用对象和集合中的字符串。

public class School{
private List<Course> courses;
private List<Student> students;
// Getters and Setters
}

public class Course{
private String name;
private String xxx;
private String yyy;
private List<String> zzzList;
}

public class Student{
private Map<String,String> xxx;
private List<Course> courseList;
}

最佳答案

是的,反射(reflection)就是出路。基本上,您需要:

  • 获取顶级对象的类(使用 [object].getClass())

  • 获取对象的所有字段(使用 clazz.getFields() - 请注意,它仅适用于公共(public)字段)

  • 检查字段是否为字符串(获取 field.getType() 并检查它是否为字符串,或者执行 field.get(对象) 和 String 实例)

  • 如果是这种情况,请使用 field.set([your object],[trimmed string]) 将对象中的字符串替换为修剪后的字符串

  • 如果字段是对象而不是字符串,则递归调用您的方法

这样就可以了。

----刚刚看到您的更新

修剪集合中的字符串会更加棘手,因为字符串不会作为集合的公共(public)字段公开(例如列表)。

您将需要一些更聪明的东西,它将检查对象是否是 List、Map 等的实例...(或派生类!)。主要问题还在于java泛型是通过在编译类型时删除类型来完成的。所以你无法知道你的字段是 List[String] 还是 List[Integer] 或其他。每个列表[?] 都成为列表。

你仍然可以尝试这样做:

  • 如果字段类型为列表
  • 迭代列表值
  • 如果值是instanceof String,则必须将其从列表中删除并插入修剪后的版本
  • 如果值是一个对象,则您可以使用您的方法再次递归。

在现实生活中的示例中不是很有趣,但在图书馆方面可能更有趣。任重而道远!

关于java - 修剪复杂对象中的所有字符串元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9189520/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com