java – 方法签名最佳实践 – 重载与长名称

只是想知道你对这两种不同的方法有什么想法:重载方法与长/详细方法名称.

更新:我正在寻找一般模式/最佳实践.以下只是一个例子.

给定具有父/子关系的组织结构

> OrgUnit
> - OrgUnit
> -- OrgUnit
> -- OrgUnit

两种方法在很大的部分使用相同的代码来获取xml元素的子代.

// 1) only 1 level down children
getSubOrgUnits()

// 2) all levels down
getSubOrgUnits(boolean includeChildren)

// 3) alternative naming of 1)
getDirectSubOrgUnits()

// 4) alternative naming of 2)
getAllSubOrgUnits()

所以1和2使用参数
3和4使用无参数命名.

你会去找什么?为什么?还要考虑1)和2)可以获得额外的参数,这些参数会产生像getChilds(true,false,null)这样的东西,但是3)和4)可能会获得像getDirectSubUnitsExcludeSome()这样的名称

可以是JAVA特定的,但对此有更广泛的看法.

最佳答案
在我看来,使用详细的方法名称是一个更好的解决方案.

>这更容易理解,您的代码将需要更少的评论
>维护起来更容易,您可以在不影响现有签名的情况下更改实施.您仍然可以添加新签名,而无需回归.

但要小心,在某些情况下,最好添加一些参数

例1

private List<Element> getElementsByType(MyTypeEnum type);

public List<Element> getElementsOfType1();
public List<Element> getElementsOfType2();
public List<Element> getElementsOfType3();

/* VS */

public List<Element> getElementsByType(MyTypeEnum type);

两种实现都很好,取决于你,MyTypeEnum的大小,它的大小增加的能力.你想揭露什么?你想让getElements ***的调用者能够获得所有类型的元素吗?

例2

public void log(Level l, String s, Exception e);

/* VS */

public void logInfo(String s);
public void logWarning(String s);
public void logError(String s, Exception e);

在这种情况下,第二部分更好.因为它更易读,易于理解.并且因为当您登录INFO和WARNING级别时,您不需要指定Exception.所以专业化这个方法是件好事.但是,保持方法public void log(Level l,String s,Exception e)非常重要;公共而非私有,因为在某些情况下使用此通用方法可能很有用.

结论

这实际上取决于具体情况,但如果您有可能添加特定方法,并使用详细的名称(专门针对目标行为),请执行此操作.

转载注明原文:java – 方法签名最佳实践 – 重载与长名称 - 代码日志