【问题标题】:Why can't you have a static and non-static method with the same method signature in Java?为什么不能在 Java 中拥有具有相同方法签名的静态和非静态方法?
【发布时间】:2015-04-05 03:39:48
【问题描述】:

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      因为:

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

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

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

      如果您正在考虑“切换参数的顺序”作为杂项,肯定重新考虑。如果您处于这种情况,肯定有总体改进的空间。如果我看到这样的代码,我会引起一些严肃的注意。

      【讨论】:

        猜你喜欢
        • 2014-11-03
        • 1970-01-01
        • 2011-12-08
        • 2012-12-28
        • 2011-04-23
        • 1970-01-01
        • 2011-03-02
        • 2011-07-11
        相关资源
        最近更新 更多