Java 重构代码,使其只包含return语句
我试图重构这段代码,使之只有一个return语句,但我似乎不知道该怎么做。我正在树中搜索特定节点。树中的每个节点都可以有子节点。如有任何指示,将不胜感激Java 重构代码,使其只包含return语句,java,algorithm,refactoring,Java,Algorithm,Refactoring,我试图重构这段代码,使之只有一个return语句,但我似乎不知道该怎么做。我正在树中搜索特定节点。树中的每个节点都可以有子节点。如有任何指示,将不胜感激 private TreeNode getDefaultNode(List list, String supervisingGroupName){ for (int i = 0; i < list.size(); i++){ TreeNode tempNode = (TreeNode) list.get(i);
private TreeNode getDefaultNode(List list, String supervisingGroupName){
for (int i = 0; i < list.size(); i++){
TreeNode tempNode = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) tempNode.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
return tempNode;
}
else {
TreeNode node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
return node;
}
}
}
return null;
}
私有树节点getDefaultNode(列表、字符串管理组名){
对于(int i=0;i
您可以执行以下操作:
private TreeNode getDefaultNode(List list, String supervisingGroupName){
TreeNode node = null;
for (int i = 0; i < list.size(); i++){
TreeNode tempNode = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) tempNode.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
node = tempNode;
break;
}else {
node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
break;
}
}
}
return node;
}
私有树节点getDefaultNode(列表、字符串管理组名){
TreeNode=null;
对于(int i=0;i
您可以使用break
关键字中断for循环:
private TreeNode getDefaultNode(List list, String supervisingGroupName){
TreeNode node = null;
for (int i = 0; i < list.size(); i++){
node = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) node.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
break;
} else {
node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
break;
}
}
}
return node;
}
私有树节点getDefaultNode(列表、字符串管理组名){
TreeNode=null;
对于(int i=0;i
通过这种方式,您可以重构为一个返回语句,尽管我似乎不再清楚这一点。重构之前,您的代码没有任何问题。我不建议一次返回;检查名称是否匹配的初始检查是有意义的,并且是清楚的,最后的null返回本身就很好地支持。我想对代码做一点修改,通过消除
else
,来降低代码的表面复杂性——在返回后,不需要在else子句中添加后面的内容,因为当然,只有当返回没有发生时才会发生。我还建议使用类型化列表,以便您可以使用“for each”循环而不是计数循环进行迭代:
private TreeNode getNodeByName(List<TreeNode> nodes, String name) {
for (TreeNode node: nodes) {
OSGroup group = (OSGroup) node.getNodeBusinessObject();
if (name.equals(group.getName())){
return node;
}
TreeNode child = getNodeByName(node.getChildren(), name);
if (child != null) {
return child;
}
}
return null;
}
private树节点getNodeByName(列出节点,字符串名称){
用于(TreeNode节点:节点){
OSGroup=(OSGroup)节点。getNodeBusinessObject();
if(name.equals(group.getName())){
返回节点;
}
TreeNode child=getNodeByName(node.getChildren(),name);
if(child!=null){
返回儿童;
}
}
返回null;
}
你会看到,我也做了相当多的重命名;我认为这些名称使代码更加清晰。您可以在方法的开头声明
TreeNode节点
,并将其设置为null
,在if
和else
块中修改它,并在方法的末尾返回它。我可以麻烦您问一下为什么吗?我认为它们可以让方法返回null更具可读性。你可以重构一个返回,但这会让代码更不可读