如何识别 Java 中方法的签名?

How to identify signatures of a method in Java?

我认为我无法理解如何在 Java 中给出方法的签名。例如,如果我的代码是:

public void addOn(Fraction other) {
      number = other.denominator * number + other.numerator * denominator;
      denominator = denominator * other.denominator;

而且我必须给出方法 addOn() 的签名;

此方法的签名是否只是 addOn(Fraction);?

这实际上取决于您需要的 "accuracy" 级别。

当您与同事进行非正式交谈时,"signature" 可能会包含人类可能感兴趣的所有信息:

  1. return类型
  2. 方法名称
  3. 参数类型(包括它们的顺序!)
  4. 抛出列表
  5. (注释)

然而,当您从编译器构造函数或 JVM compiler 的角度出发时,答案就不同了;在这种情况下,只有第 2 项和第 3 项很重要; 不是签名的一部分。

如果您想将 Fraction 作为参数传递给 class。首先,您需要创建 Fraction 的引用,例如

Fraction ref =new Fraction();//Assuming Fraction class has default constructor

然后你可以将它传递为;

addOn(ref);//Ref of Fraction class as parameter

在 Java 中,方法签名仅包含方法名称和参数的数据类型。

例如在您上面发布的方法中:

public void addOn(Fraction other) {

}

签名将是 addOn(Fraction )。

这是C++和java的区别之一,在C++签名中也包含return类型,但在java中return类型没有方法签名的一部分。 因此,在 C++ 方法签名的情况下,上述方法将为 void addOn(Fraction);

我相信,你应该参考this article

它明确指出一个方法签名只包含:

  1. 方法名称
  2. 参数类型,即参数的类型和顺序

所有其他部分,如异常、return 类型、注释是方法声明的一部分,而不是签名。

除了这些语法方面的东西,在选择方法名称时还应该考虑语义。

  • 方法名应遵循驼峰式
  • 方法名要有意义
  • 方法名称应以动词开头

我会建议您完成 java coding guidelines