Java 如何清理类似代码

Java 如何清理类似代码,java,coding-style,Java,Coding Style,我想在系统中做数据的深度拷贝。我有这样的课: Class User{ User mother; User father; User spouse; } 创建单个记录后,我希望按如下方式重建它们的引用: Map<User, User> motherMap = new HashMap<User, User>(); Map<User, User> fatherMap = ...; Map<User, User> spouseMa

我想在系统中做数据的深度拷贝。我有这样的课:

Class User{
    User mother;
    User father;
    User spouse;
}
创建单个记录后,我希望按如下方式重建它们的引用:

Map<User, User> motherMap = new HashMap<User, User>();
Map<User, User> fatherMap = ...;
Map<User, User> spouseMap = ...;

//Now I want to populate User reference like this:
for(User user : motherMap.keySet) {
    //some other similar code;
    user.setMother(motherMap.get(user));
} 
for(User user : fatherMap.keySet) {
    //some other similar code;
    user.setFather(fatherMap.get(user));
}
for(User user : motherMap.keySet) {
    //some other similar code;
    user.setSpouse(spouseMap.get(user));
}
mapmothermap=newhashmap();
映射fatherMap=。。。;
映射语义映射=。。。;
//现在我想像这样填充用户引用:
for(用户:motherMap.keySet){
//其他类似代码;
user.setMother(motherMap.get(user));
} 
for(用户:fatherMap.keySet){
//其他类似代码;
user.setfard(fatherMap.get(user));
}
for(用户:motherMap.keySet){
//其他类似代码;
user.setSpouse(spoosemap.get(user));
}

你知道我如何清理类似的代码吗?我想让我的代码更好,因为在实际代码中,用户之间有10多个引用。Intellij警告说,这种方法太复杂,无法分析,我觉得我只做复制粘贴…

您可以这样做,从所有地图创建一组所有关键点:

Set<User> allUsers = new HashSet<User>();

allUsers.addAll(motherMap.keySet());
allUsers.addAll(fatherMap.keySet());
allUsers.addAll(spouseMap.keySet());

for (User u : allUsers) {
    u.setMother(motherMap.get(u));
    u.setFather(fatherMap.get(u));
    u.setSpouse(spouseMap.get(u));
}
Set alluser=new HashSet();
addAll(motherMap.keySet());
addAll(fatherMap.keySet());
addAll(spoosemap.keySet());
用于(用户u:allUsers){
u、 setMother(motherMap.get(u));
u、 setfard(fatherMap.get(u));
u、 设置输出(输出映射获取(u));
}

您是否尝试使用

instance of

你想达到什么目标?需要一些描述哪一个是“主”数据集?用户实例处于控制状态,并且三个映射是从它们派生的,还是映射处于控制状态,并且用户实例是从映射派生的?在您的示例代码中,您似乎在做后面的工作,但需要更多的解释。顺便说一句,我认为让地图“在控制中”是一个可疑的想法。我同意,根据示例代码,这是不清楚的。伪代码似乎创建了新的映射,这一事实令人困惑。这表明代码应该填充地图,但常识表明我们正在尝试填充用户对象。我想做一个来自其他系统的用户的深度拷贝。首先,我创建了与其他用户无关的用户,并将其关系存储在地图中。然后在我坚持他们之后,我想从那些地图上重建他们的关系。嗯?你在说什么?几天前我也有类似的问题。有几个子类,需要知道使用哪个子类来使用正确的命令。当我发现,如果你在处理子类,操作符的实例基本上被遗忘了。这个问题与instanceof无关。它将用来区分哪些类和/或子类?它们都是用户对象。而且,
instanceof
是一个词……谢谢大家。我最终决定使用反射来更新这些字段。