繁体   English   中英

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

[英]Why can't you have a static and non-static method with the same method signature in Java?

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

因为Java允许以非静态方式调用static方法,即在类的对象上调用static方法。 因此,如果一个类具有staticnon-static方法 - 相同签名的method() ,则调用如下: obj.method()将是不明确的。

因为:

class Example {

   void method () { }

   static void method () { }

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

}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM