我有一个对象,它包含几个字段(整数、字符串等),还有一个 HashMap 和一个 ArrayList。此对象包含用于稍后构建数据库查询的参数,但有时我需要将所有完全相同的参数重新用于其他查询,但 ArrayList 中的不同项目除外。
我注意到,当我更改数组列表中的内容时,它总是会更改原始对象。我已经弄清楚如何通过覆盖 clone() 方法来制作浅拷贝,但数组列表始终由对象的任何副本共享。在深入研究深拷贝等之前,我认为我需要关于这是否是最佳途径的建议。
这是我需要找到复制方法的对象的示例。
public class QueryParameters implements Cloneable {
protected HashMap<String,String> foundArgs = new HashMap<String,String>();
protected ArrayList<ActionType> action_types = new ArrayList<ActionType>();
protected String lookup_type = "lookup";
protected Location loc;
protected Vector player_location;
protected int id = 0;
protected int radius;
protected boolean allow_no_radius = false;
protected String player;
protected String world;
protected String time;
protected String entity;
protected String block;
// ... lots of getters/setters
}
我总是可以创建一个新实例并使用 getter/setter 来传输数据,但这对我来说太冗长了——我必须复制大约 15 个字段,如果我添加新的字段,我需要记住在此处添加它们。
我获得新实例/克隆的最佳方法是什么,以便更改action_types
不会影响原始对象