我剛讀這篇文章在這裏:http://hamletdarcy.blogspot.com/2008/04/10-best-idea-inspections-youre-not.html,特別是最後一點讓我想起了我的代碼,具體的建議:公共靜態方法 - 一個壞跡象?
在世界上什麼是公共方法,你的對象有做不依賴於對象內的任何字段?這當然是一種代碼味道。問題在於檢查的「自動修復」是應用靜態關鍵字。真是沒有。這不是你想要做的。不依賴於對象狀態的公共方法不可能是具有明確表述的對象的一部分。它只是沒有凝聚力,應該放在別的地方。所以:如果該方法是私人的,接受自動修復,但如果該方法是公開的,則不要。
有問題的代碼本質上是一個對象變換器。它需要一個類型爲A的對象並將其轉換爲不同的類型。
我的層次結構是這樣的:
接口ObjectTransformer - > GenericObjectTransformer
,然後在下面這個,GenericObjectTransformer由ObjectTransformerA和ObjectTransformerB擴展現在
,由兩個ObjectTransformerA和ObjectTransformerB需要的一些功能,但實際上並不依賴GenericObjectTransformer的任何實例變量,因此它是GenericObjectTransformer中的受保護靜態方法。
這是否違反了上述規則?顯然這是受到保護而不是公開的,但它仍然是一種與班級本身無關的班級以外的方法?
有什麼想法?
使用受保護的靜態方法時,一定要將它們標記爲最終。當人們認爲自己是虛擬的時候,很容易混淆人們,當他們絕對不是。並始終限定(將超類名稱首先)從你的子類調用它們。 – 2010-07-30 13:24:51