【问题标题】:What are the guidelines for referring to Java methods?引用 Java 方法的准则是什么?
【发布时间】:2015-08-26 12:42:51
【问题描述】:

当我需要在讨论中引用 Java 方法时,我曾经这样写:

Object.equals(Object)

但不清楚是否:

  • 方法是静态的。
  • 该方法有一个返回类型。
  • 该方法具有可见性修饰符。
  • 该方法可能会引发异常。

那么在引用Java方法时,有没有编写Java方法的标准?

【问题讨论】:

  • 有趣的问题。我假设“命名”是指在讨论代码时引用方法的行为?在这种情况下,这更像是一个“元”问题,而不是关于 Java 本身的问题。
  • 您的问题具有误导性。您不是在问用 Java 编写方法的标准是什么。你问我如何调用特定的方法?你可以查一下。
  • Java 中的约定方法名称是“camelCase”。除此之外,适当地命名它们以描述它们的工作。静态或返回值与什么有什么关系?
  • java 中的一般方法名称描述了非常简短的功能。即名称为getX 的方法应返回x,而不是打印“hello world”

标签: java methods


【解决方案1】:

最完整的版本是使用修饰符和返回类型编写方法的整个签名,并最终像标准 javadoc 中那样抛出异常:

public boolean equals(Object obj)

显然,它还取决于您使用引用的上下文。尽量做到需要的完整,不要更多。

【讨论】:

    【解决方案2】:

    假设这个问题是指在元上下文中讨论 Java 代码时如何引用方法的困难。例如

    在这种情况下,您应该使用StringBuilder.append() 方法而不是++ 运算符,因为...

    现在,我们可以讨论的一种方法可以分为以下几种方式:

    • 静态与非静态
    • 有参数 vs 没有参数
    • 有返回值 vs 有 void 类型
    • 公共与私人与其他访问权限

    在上下文中,上面的示例足以明确,因为名为“append”的方法之间没有很大的重叠。然而,如果它被提升为一些实际的 Java 代码,它可能无法编译,原因如下:

    • 有问题的“追加”方法需要一个参数
    • 它是一个非静态方法,上面的用法看起来像一个静态方法调用。

    另外,因为写成静态方法调用,但指的是实例方法调用,读者可能会感到困惑。

    在很多情况下,通常可以找到一个解决方案,通过给出一个实际的代码示例来消除所有的歧义。

    试试这个方法:

    StringBuilder sb = new StringBuilder(); sb.append(textToAppend);

    这样做的问题是不必要的冗长,并且变得更加笨拙和不方便。此外,它失去了以“元”方式讨论方法的能力,并且没有明显的地方可以放置链接以供参考。

    如果您所指的方法的类是已知的,那么消除所有歧义的一种方法是给出Java API Specification 中给出的完整方法签名,包括访问修饰符。例如

    尝试使用StringBuilder 实例的public StringBuilder append(String str) 方法。这样可以避免重复...的过程

    这具有一致性和显示所有相关信息的优点,但它确实变得更费力。

    如果上下文意味着没有歧义,则省略以下任何一项都是合理的:

    publicStringBuilder append(String str)

    如果访问修饰符与讨论无关,您可以省略 public

    publicStringBuilderappend(String str)

    如果返回类型是显而易见的、明确的或与讨论无关的,则可以省略它。

    public StringBuilder append(Stringstr)

    如果参数名称与讨论无关(通常是这种情况),您可以省略参数名称。

    public StringBuilder append(String str)

    如果意图没有歧义或它们不相关,您可以完全省略参数。

    尝试使用StringBuilder 实例的append 方法。这样可以避免重复...的过程

    这可能是最明确的方法,同时避免了不必要的信息。也就是说,我的第一个示例中的符号非常方便,通常不会导致混淆。

    归根结底,这取决于口味,但避免歧义应该是最重要的考虑因素,为此,采用相对符合 Java API 规范本身的方法似乎是个好主意。

    【讨论】:

      【解决方案3】:

      这是一个很好的指南:Defining Methods

      没有返回类型的方法将被声明为 void,而具有返回类型的方法将返回类型作为方法声明的一部分。

      可以从另一个类调用静态方法(在一个类中),而无需创建该类的实例。

      【讨论】:

      • 我认为这个问题是指讨论(在元上下文中)Java 方法名称的问题,而不是命名约定的问题。
      猜你喜欢
      • 1970-01-01
      • 2011-05-06
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多