我看到有時類中不依賴實例狀態的方法被標記爲static
。我發現它很明顯,它宣稱'這種方法獨立於實例狀態'。當審查狀態不一致的機會時,完全忽略該方法是很容易的。不讀取/寫入實例狀態的標記方法
但是,將靜態方法標記爲靜態方法的問題是無法繼承或覆蓋靜態方法。
像這樣的事情在這裏討論:Does it make sense to have a non static method which does not use an instance variable?
會是有意義的有一個註釋來聲明非靜態方法是狀態無關?然後編譯器可以驗證它只使用其他獨立於狀態的方法。
管道中是否有這樣的功能?
當然會。這就是爲什麼C++有* const *的原因。也許你想檢查是否有人在java社區過程中發出請求;如果不;啓動它;-)但嚴重 - * static *上的另一個視圖是:這是OO內的異常。除了你提到的問題之外,靜態調用還會導致更緊密的耦合;和更難測試的代碼。所以重點是:你儘可能避免它。 – GhostCat
@GhostCat請注意,這與C++ const不同,這基本上提出了可覆蓋/虛擬靜態方法。 – hyde
@hyde是的......當我向方法傳遞兩個參數並獲得一個返回值時,有時候我想確保(1)該方法僅使用這個類中的這兩個輸入,(2)它不以任何方式改變狀態。 – Teddy