簡體   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