因此,在java中,您可以';是否有具有不同返回和参数的重复方法名?

因此,在java中,您可以';是否有具有不同返回和参数的重复方法名?,java,Java,Java中是否可能有两个名称相同但参数和返回类型不同的方法?似乎这将是一个很好的方法来概括一个简单的getter和setter。。您可以使用构造函数来实现这一点,为什么不使用常规方法呢?比如说 为什么不能做 int getVal() { return int; } boolean getVal() { return true; } setVal(int a) { } 及 如果我打电话给你,你会怎么想: getVal(); 没有收到回音?您有两种选择-布尔变量或整数变量。由于无法强制

Java中是否可能有两个名称相同但参数和返回类型不同的方法?似乎这将是一个很好的方法来概括一个简单的getter和setter。。您可以使用构造函数来实现这一点,为什么不使用常规方法呢?比如说

为什么不能做

int getVal() {

return int;
}

boolean getVal() {

return true;

}

setVal(int a) {
}


如果我打电话给你,你会怎么想:

getVal();
没有收到回音?您有两种选择-布尔变量或整数变量。由于无法强制执行要收集的返回值,编译器无法确定要调用的变量


您可以在方法参数上重载,但不能仅在返回类型上重载,因为这是不明确的(如上所示)。

因为这样编译器将无法找出:

setVal(getVal()); setVal(getVal());
它应该调用bool还是int版本?

不同的返回类型,否。但是不同的参数类型/长度,是的。Java就是这样。。。说明书上说。他们希望保持简单。

乍一看,似乎没有理由不允许这样做,但是从必须调用此(这些)方法的代码的角度考虑,它如何知道要调用哪个方法

Java编程语言支持重载方法,Java可以区分具有不同方法签名的方法。这意味着,如果类中的方法具有不同的参数列表,则它们可以具有相同的名称(在标题为“接口和继承”的课程中将对此进行讨论)

重载方法通过传入方法的参数的数量和类型来区分。

不能用相同的名称、相同数量和类型的参数声明多个方法,因为编译器不能告诉它们apart

编译器在区分方法时不考虑返回类型,因此,即使它们具有不同的返回类型,也不能声明具有相同签名的两种方法。


就Java虚拟机而言,一个类可以声明具有相同签名但返回类型不同的多个方法

只有Java作为一种语言禁止这样做。

您可以在您的案例中声明这两个setter,试试看

方法的名称、参数的数量和类型必须是唯一的。返回类型以及
throws
子句在使方法唯一性方面不起作用(这很有意义,因为在调用方法时没有指定它们)。

一般来说-否。 但是如果你非常想要它——那么是的:))
根据Java语言规范检查此项(http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.4.2):

使用声明两个方法是编译时错误 重写类中的等效签名(定义如下)

如果两个方法具有相同的名称和名称,则它们具有相同的签名 参数类型


如果它收到一个布尔值作为参数,那么当构造函数接受不同的参数但可以有相同的名称时,它应该使用接受和设置布尔值的setVal。但是编译器首先会如何选择getVal的bool版本呢?它显然有两个同样有效的选择。实际上,如果同时存在
setVal(boolean)
setVal(int)
,它就不可能解决int/boolean问题。至于字符串/对象的情况,它可以使用与遇到调用
foo(“bar”)
时相同的解析规则,并且有
foo(字符串)
foo(对象)
可供选择-即。,使用最具体的方法。我认为即使它可行,它也会造成很大的性能下降,因为JVM在决定调用哪种方法时必须处理所有这些测试。无论如何,我认为这种方式迫使我们在设计系统时更加整洁和负责。。例如如果(getVal==true),则应调用返回true的getVal。。否则,如果它是int a=getVal(),它应该调用返回int的函数。正如我所说明的,您不能在这个函数上强制返回值。这实际上是有原因的:使用桥接方法的协变返回类型。编译器不能。但jvm可以。J+2为有趣的文章,-1为恐怖的想法,人们实际上可能会这样做:-我完全同意你的意见。一种情况下,它将是真正需要的-遗留代码,在那里可以轻松地添加新的钩子,而不是重写所有可能的重复 setVal(getVal());