簡體   English   中英

對導入的庫進行命名空間以在Java中保持清晰

[英]Namespacing imported libraries for clarity in Java

是否可以保留在Java中導入的方法的名稱空間? 我想從技術和實踐角度出發。

例如,假設我要導入spark庫,以便可以使用它的get()方法,那么我可能會做類似的事情

import static spark.Spark.*;

public static void main(String[] args) {
    get(....);
    // do stuff
}

對於正在研究這個問題的人(尤其是當項目更大時,並且導入了幾件事),“ get()”的來源並不是很明顯。 我很想能夠做這樣的事情

import static spark.*;

public static void main(String[] args) {
    Spark.get(....);
    // do stuff
}

如您所見, get()調用現在在Spark下在視覺上具有名稱空間。

通常認為這是允許的,還是這種方法有缺點? 如果是這樣,為什么會有更多項目不使用這種方法?

謝謝!

在我看來,這完全取決於您使用的是什么-靜態調用上的類名是可以的,但是當您經常使用某些東西時,這將成為問題-因為這樣您就可以掩蓋假感覺含義背后的邏輯。

我還要說get是靜態方法的一個非常該死的壞名字-如果方法名具有更多的含義,那么它們對類名的依賴就會減少-但是在這里,使用框架時我們別無選擇。

首先,在您希望執行的操作中使用靜態導入是不正確的。 照原樣,這意味着導入類spark所有靜態成員,而spark是包。 Spark類將是未知的,並且會出現編譯錯誤。 除去上面的static ,然后導入spark包的所有類。 您將類成員稱為ClassName.member ,將實例成員稱為instanceName.member 類名本身的沖突很少見。 因此,該方案按原樣具有很好的可讀性和優雅性。 但是,如果您的代碼使用了很多導入類的靜態成員,則每次通過在類名前加前綴來引用它們可能很麻煩等,因此我們有一種靜態導入的捷徑。 Java文檔對此有很好的建議,也許可以回答您的問題。

... So when should you use static import? Very sparingly! Only use it when you'd otherwise be tempted to declare local copies of constants, or to abuse inheritance (the Constant Interface Antipattern). In other words, use it when you require frequent access to static members from one or two classes

暫無
暫無

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

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