![](/img/trans.png)
[英]Why should 'getter' methods in 'Manager' classes not be static?
[英]Should static methods be separated from Classes with instance methods?
作為一般慣例,靜態方法是否應該從具有實例方法的類中分離為另一個類?
你的理由還有一個例子嗎?
沒有一般約定規定靜態方法必須與非靜態方法分開。 實際上,如果這兩種方法彼此足夠相關,那么將方法分開將是違反直覺的。
回想一下靜態方法(和字段)的用例:它們是可以在沒有特定類的實例的情況下使用的方法/字段。 這通常意味着它們擁有有價值的元數據或執行與其類實例相關的有用操作,但不需要直接實例化該類。
以Integer
為例。 它具有靜態[ final
]字段MAX_VALUE
和MIN_VALUE
。 由於這兩個字段都包含在實例化之間不會更改的固定信息,因此必須實例化Integer
以獲取此信息是沒有意義的。
Integer
還有一個有用的操作parseInt
,它接受一個String
並將其轉換為int
。 我們不應該要求Integer
的實例從String
轉換為int
, 特別是如果我們不將它放入Integer
的實例中。
總體慣例是將相關方法保持在一起 ,無論它們是否是靜態的。 您可以在某些Java庫類(如Integer
看到更清晰的示例。
它可能是一個重復的問題,但不是,靜態方法具有非常特定的好處,這些好處在實例化為對象的類中通常很有用。
沒有這樣的慣例。 這完全取決於你的情況。 某些類可能確實需要靜態和非靜態成員的混合。
但有些時候可以看到在一些java項目中使用Constatns.java/ Utils.java
類。 你可能發現 -
public static final double PI = 3.1416;
public static getArea(double r){}
該類包含一些最終的靜態屬性和一些最終方法。 這些類的目的是在整個項目中提供一些常量或實用方法。
絕對答案將由用例決定,但沒有這樣的約定。 最多你有一些Utility
類可能有一堆靜態方法,其他類被用作輔助方法。 例如,測試String是電子郵件還是從電子郵件中提取用戶名等。
在編寫API或框架時,將所有靜態方法放在單獨的類中會很有用。 Collections類就是一個例子。 java.lang.Math或java.lang.System是另一個。
通常,在以下方案中定義靜態方法:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.