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

标签 java language-agnostic naming-conventions overloading

只是想知道您对这两种不同的方法有何看法:重载方法与长/冗长的方法名称。

更新:我正在寻找通用模式/最佳实践。以下仅为示例。

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

> 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*** 的调用者能够获取所有类型的 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);

在这种情况下,第二部分更好。因为它更具可读性,乍一看容易理解。并且因为当您登录到 INFOWARNING 级别时,您不需要指定 Exception。因此,专门化该方法是一件好事。但是,保持方法 public void log(Level l, String s, Exception e); 是公开的而不是私有(private)的很重要,因为在某些情况下使用这种通用方法可能很有用。

结论

这确实取决于具体情况,但如果您有可能添加特定的方法,使用冗长的名称,专门针对目标行为,那就去做吧。

关于java - 方法签名最佳实践 - 重载与长名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27035474/

相关文章:

java - SCJP 有什么好东西吗?

java - java中的SQL返回错误的数据

algorithm - 从数字列表中找到一对和的算法?

oop - 如何着手设计一个模块?

java - Android XML 和 .java 文件中的最佳实践和约定

java - 需要效率方面的建议 : Scanning 2 very large files worth of information

java - jsf页面中的空白页面

math - float 学运算是否被破坏?

c# - 重命名保留字的属性/方法名称的最佳实践?

c++ - C++ 中的函数名称 : Capitalize or not?