为什么不能在Java中使用相同的方法签名的静态和非静态方法?

时间:2015-04-04 19:23:22

标签: java

对我来说似乎没有意义。也许有人可以帮助我理解。我必须切换参数的顺序以获得此功能,这似乎有点愚蠢。

2 个答案:

答案 0 :(得分:10)

因为Java允许以非静态方式调用static方法,即在类的对象上调用static方法。因此,如果某个类具有相同签名的non-staticmethod()方法 - obj.method(),那么这样的调用:{{1}}将是不明确的。

答案 1 :(得分:4)

由于:

class Example {

   void method () { }

   static void method () { }

   void example () {
      method();   // <- ambiguous
   }

}

因此,您要么引入一个约束来区分该上下文中的静态和非静态调用,例如在静态调用之前需要Example.,或者您不允许使用相同的签名。后者被选中了。

请注意,在大多数情况下,如果您发现自己想要具有相同签名的静态和非静态方法,这可能是可能的设计问题的红旗,或者至少建议可以选择更好的方法名称

如果您正在考虑“切换参数的顺序”作为kludge,绝对重新考虑。如果你在那种情况下,肯定有改善的空间。如果我看过这样的代码,我会引起一些严肃的关注。