对我来说似乎没有意义。也许有人可以帮助我理解。我必须切换参数的顺序以获得此功能,这似乎有点愚蠢。
答案 0 :(得分:10)
因为Java允许以非静态方式调用static
方法,即在类的对象上调用static
方法。因此,如果某个类具有相同签名的non-static
和method()
方法 - obj.method()
,那么这样的调用:{{1}}将是不明确的。
答案 1 :(得分:4)
由于:
class Example {
void method () { }
static void method () { }
void example () {
method(); // <- ambiguous
}
}
因此,您要么引入一个约束来区分该上下文中的静态和非静态调用,例如在静态调用之前需要Example.
,或者您不允许使用相同的签名。后者被选中了。
请注意,在大多数情况下,如果您发现自己想要具有相同签名的静态和非静态方法,这可能是可能的设计问题的红旗,或者至少建议可以选择更好的方法名称
如果您正在考虑“切换参数的顺序”作为kludge,绝对重新考虑。如果你在那种情况下,肯定有改善的空间。如果我看过这样的代码,我会引起一些严肃的关注。