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

3

我相信我在理解如何在Java中给方法签名方面遇到了麻烦。例如,如果我的代码是:

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

我需要为方法 addOn() 提供签名;

这个方法的签名是否只需要是 addOn(Fraction)?


1
@azurefrog 返回类型不是签名的一部分。 - khelwood
1
请点击此处查看方法签名的规范。 - khelwood
@khelwood 谢谢,这帮助我更好地理解签名是如何工作的! - Derrik Antrium
4个回答

3

这实际上取决于你需要多高的“准确性”。

当你与同事进行非正式交流时,“签名(signature)”可能包含所有人类可能感到有趣的信息:

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

然而,从编译器构造者或者JVM编译器的角度来看,答案是不同的;在这种情况下,只有第2项和第3项才重要;其他任何内容都不是“签名”的一部分。


2
在Java中,方法签名仅包含方法名称和参数的数据类型,没有其他内容。
例如,在您上面发布的方法中:
public void addOn(Fraction other) {

}

签名将添加addOn(Fraction)。

这是C++和Java之间的一个区别,在C++中,签名还包含返回类型,但在Java中,返回类型不是方法签名的一部分。 因此,在C++中,上述方法的方法签名将为void addOn(Fraction);


参数类型也包括在内,因为如果方法是method(int a, String b),那么该方法的签名将是method(int,String),已经考虑了顺序,因为在改变顺序即method(String,int)之后,参数类型也会发生变化。 - Vivek Kumar
1
以上代码存在问题,因为数字未被初始化。 - Amber Beriwal

1
如果你想将 Fraction 作为参数传递给类,首先需要创建 Fraction 的引用,如下所示:

Fraction ref = new Fraction(); // 假设 Fraction 类有默认构造函数

然后可以将其作为参数传递,如下所示:

addOn(ref); // 将 Fraction 类的引用作为参数


0

我认为,你应该参考this article

它清楚地说明了方法签名仅包含以下内容:

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

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

除了这些语法上的事情之外,在选择方法名称时还应考虑语义。

  • 方法名应遵循驼峰命名法
  • 方法名应有意义
  • 方法名应以动词开头
我建议你阅读Java编码规范

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接