簡體   English   中英

何時在Java中使用靜態導入

[英]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()

由於靜態導入純粹是為了方便起見,它可能更合理要求時,它的不恰當使用,而不是在使用它。 在以下情況下,您不應使用靜態導入:

  • 您將在多個靜態導入之間創建名稱沖突(盡管如此,我相信javac會對沖突大喊大叫)
  • 尚不清楚您使用的靜態成員來自哪個類; Java開發人員對out.println很熟悉,他們會立即假設它來自System ……因此,請不要靜態導入其他名為“ out”的字段,該字段具有方法“ println”! cossintanpowpow友可以很明顯地從Math推導出來,尤其是在上下文中。

通常,我不建議每個文件從多個類中進行靜態導入,只是為了減少讀取代碼時的混亂。 foo(Bar b)是來自FizzBuzz的導入嗎?還是等等,它是從其他地方導入的嗎?!” 您不是希望將來的開發人員問自己的問題; 並且記住,它不會需要很長時間讓忘了所有你為你自己的代碼所做的設計決策,所以要對自己好一點不如別人!

您可以在任何地方使用它,但是它可能會使代碼的可讀性降低。 但是也有例外,例如,在JUnit測試中使用靜態導入是公認的慣例

import static org.junit.Assert;

...

assertEquals(expected, actual);

暫無
暫無

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

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