[英]When to use static imports in java
什么時候執行靜態導入package.package.class? 在Google上似乎沒有人回答這個問題。
靜態導入使您可以編寫以下代碼:
out.print("The result is ");
而不是這樣:
System.out.print("The result is ");
這對我來說沒有意義。 如果我導入該類,為什么也不會導入其方法?
使用靜態導入可讓您進行以下操作:
double r = Math.cos(Math.PI * theta);
到這個:
double r = cos(PI * theta);
靜態導入會告訴類這些方法的來源,因此在使用靜態導入時,您無需在方法前加上類名
嘗試import static java.lang.System.out;
。 您不是在導入其方法,而是在導入其靜態out
成員變量。
static import
很方便。 如果您在代碼中反復使用某個類的static
成員,則靜態導入將使您免於編寫太多代碼。
System.out.println
成為out.println
可能是最常見的用途之一,因為它通常與控制台調試和控制台應用程序連接。 但是,任何具有靜態成員(方法或字段)的類都可以有效使用。 例如,如果您廣泛使用Math
,則靜態導入該類將使您對數學函數的調用更簡單。 如果您經常調用單例類的方法,則靜態導入該類將使您從Singleton.INSTANCE.method()
轉到INSTANCE.method()
。
由於靜態導入純粹是為了方便起見,它可能更合理要求時,它的不恰當使用,而不是在使用它。 在以下情況下,您不應使用靜態導入:
out.println
很熟悉,他們會立即假設它來自System
……因此,請不要靜態導入其他名為“ out”的字段,該字段具有方法“ println”! cos
, sin
, tan
, pow
和pow
友可以很明顯地從Math
推導出來,尤其是在上下文中。 通常,我不建議每個文件從多個類中進行靜態導入,只是為了減少讀取代碼時的混亂。 “ foo(Bar b)
是來自Fizz
或Buzz
的導入嗎?還是等等,它是從其他地方導入的嗎?!” 您不是希望將來的開發人員問自己的問題; 並且記住,它不會需要很長時間讓你忘了所有你為你自己的代碼所做的設計決策,所以要對自己好一點不如別人!
您可以在任何地方使用它,但是它可能會使代碼的可讀性降低。 但是也有例外,例如,在JUnit測試中使用靜態導入是公認的慣例
import static org.junit.Assert;
...
assertEquals(expected, actual);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.