簡體   English   中英

應該使用實例方法將靜態方法與類分開嗎?

[英]Should static methods be separated from Classes with instance methods?

作為一般慣例,靜態方法是否應該從具有實例方法的類中分離為另一個類?

你的理由還有一個例子嗎?

沒有一般約定規定靜態方法必須與非靜態方法分開。 實際上,如果這兩種方法彼此足夠相關,那么將方法分開將是違反直覺的。

回想一下靜態方法(和字段)的用例:它們是可以在沒有特定類的實例的情況下使用的方法/字段。 這通常意味着它們擁有有價值的元數據或執行與其類實例相關的有用操作,但不需要直接實例化該類。

Integer為例。 它具有靜態[ final ]字段MAX_VALUEMIN_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是另一個。

通常,在以下方案中定義靜態方法:

  • 在編寫實用程序類時。
  • 如果方法不使用任何實例變量。
  • 如果任何操作與實例創建無關。
  • 如果您確定永遠不會更改或覆蓋方法的定義。 由於靜態方法無法被覆蓋。

看到這里 - https://stackoverflow.com/a/5313383/760393

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM