我有一個幫助器類,它接收一些對象,對其進行處理並返回其他類的一些實例甚至對象的列表。 什麼是最好的方法:使這個輔助方法是靜態的還是非靜態的? 問題是,我的應用程序可以創建大量的Car對象,我在考慮當它們每個使用靜態助手時它是否會產生負面影響?在助手類中使用靜態方法與非靜態方法
回答
大多數幫助程序或實用程序類都使用靜態方法。如果你想創建你的助手類的多個實例,你應該只使用非靜態方法,但因爲你只需要一個簡單的輸入 - >函數 - >輸出,所以我會使這些方法成爲靜態的。
這是錯誤的。只有在有充分理由讓它們變成靜態時,才應該使用靜態類/方法,而不是相反。 –
@shay__像它是一個幫助者的方法,不涉及任何狀態或需要被覆蓋? –
@shay__工具類通常是靜態的。爲單個不相關的方法實例化一個對象是多餘的。他的建議沒有錯,你誤解了它。 – Stavm
也許這是可以解決的問題,而不需要決定幫助對象的生命週期。
你應該儘量利用依賴注入的方法:
public class X
{
public X(IHelper helper)
{
Helper = helper;
}
private IHelper Helper { get; }
public void DoStuff()
{
var result = Helper.DoOtherStuff(input);
}
}
也就是說,X
不知道是否助手總是相同的情況下,或者如果它是一個短暫的對象。這使得代碼更加清晰並且更加友好,因爲您可以用僞造的IHelper
實現來嘲笑幫手,以確保您只是在測試X
。
我會在你的例子中將類型改爲IHelper以強調'X'和它的幫助器之間沒有耦合 –
@shay__我想過要做到這一點......我可以改變它,沒問題.. –
對靜態方法使用靜態類,沒有實例,沒有派生,只有靜態方法在類中。
public static class HelperClass
{
public static void HelperMethod()
{
// do something
}
}
- 1. 在Dao類中使用靜態方法或非靜態方法?
- 2. 泛型方法:靜態與非靜態
- 3. 靜態與非靜態方法2
- 4. 方法參考靜態與非靜態
- 5. 靜態與非靜態方法
- 6. 使用非靜態方法中的內部類的靜態類
- 7. 不能使靜態方法非靜態
- 8. 非靜態調用靜態方法
- 9. 從非靜態類動態調用非靜態方法的最簡單方法?
- 10. Java:靜態方法與非靜態方法
- 11. 靜態同步方法與非靜態同步方法
- 12. 靜態方法或使用靜態字段的非靜態方法
- 13. 從Python中的靜態方法調用非靜態方法
- 14. java中的靜態方法可以調用非靜態方法
- 15. 在靜態web方法裏面調用非靜態方法
- 16. (Java)靜態通用方法與泛型類靜態方法
- 17. 非靜態類中的靜態方法和靜態類中的靜態方法有什麼區別?
- 18. Java錯誤:靜態方法無法引用非靜態方法
- 19. 在靜態SQLiteDatabase類中調用非靜態方法
- 20. 如何在靜態方法中訪問靜態和非靜態方法
- 21. 靜態/非靜態方法問題
- 22. 靜態和非靜態方法工作
- 23. 靜態/非靜態方法參考
- 24. powermockito靜態和非靜態方法鏈
- 25. 非靜態方法說它的靜態?
- 26. 靜態和非靜態方法
- 27. 靜態參照非靜態方法getBaseContext()
- 28. 非靜態的靜態方法
- 29. 抽象掉在靜態方法在非靜態類類型
- 30. 需要在靜態和非靜態方法中使用實例
您是否有一些示例代碼,以幫助您對問題給出最合適的答案 –
@ J.Doe Yup。你的車可能會爆胎。笑話分開,你能告訴我們一些代碼嗎? – CKing
當你測試你的課堂(原來的,而不是輔助課堂)時,你是否需要模擬一些功能?如果是這樣,你不應該使用靜態方法。 –