Luk*_*lar 7 java language-agnostic overloading naming-conventions
只是想知道你对这两种不同的方法有什么想法:重载方法与长/详细方法名称.
更新:我正在寻找一般模式/最佳实践.以下只是一个例子.
给定具有父/子关系的组织结构
> OrgUnit
> - OrgUnit
> -- OrgUnit
> -- OrgUnit
Run Code Online (Sandbox Code Playgroud)
两种方法在很大的部分使用相同的代码来获取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()
Run Code Online (Sandbox Code Playgroud)
所以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);
Run Code Online (Sandbox Code Playgroud)
两种实现都很好,它取决于你,大小MyTypeEnum,它的容量增加的大小.你想揭露什么?你想让呼叫者getElements***能够得到所有类型的Element?
例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);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,第二部分更好.因为它更易读,易于理解.并且因为当您登录INFO和WARNING级别时,您不需要指定Exception.所以专业化这个方法是件好事.但是,保持方法public void log(Level l, String s, Exception e);公开而不是私有是很重要的,因为在某些情况下使用这种通用方法会很有用.
结论
这实际上取决于具体情况,但如果您有可能添加特定方法,并使用详细的名称(专门针对目标行为),请执行此操作.