使用 Java 通配符導入的優缺點
一、概述
在本教程中,我們將討論在 Java 中使用通配符導入的優點和缺點。
2. Java 中的導入
Java import
語句聲明代碼中使用的名稱(類名、靜態變量和方法名)的來源。
例如,讓我們看一個Book
類:
import java.util.Date;
import java.util.List;
import java.util.UUID;
public class Book {
private UUID id;
private String name;
private Date datePublished;
private List<String> authors;
}
在這裡,我們需要將Date
和UUID
這兩種數據類型與List
接口一起導入,因為它們默認不可用。因此,我們編寫了三個導入語句以使這些數據類型可用於我們的類。讓我們將這些類型的導入稱為特定導入。
3. Java 通配符導入
通配符導入是指導入包而不是聲明從包中使用的特定類名。
使用通配符,我們可以用一個語句替換上一個示例中的三個 import 語句:
import java.util.*;
public class Book {
private UUID id;
private String name;
private Date datePublished;
private List<String> authors;
}
這一通配符import
語句將整個java.util
包添加到搜索路徑,其中可以找到所需的UUID
、 Date,
和List
名稱。
4. 通配符導入的優勢
與 Java 中的特定導入相比,通配符導入自然有一些優勢。讓我們在下面的小節中討論通配符導入的主要優點。
4.1。清潔代碼
通配符導入幫助我們避免代碼中出現一長串導入。因此,這會影響代碼的可讀性,因為讀者可能必須在每個源代碼文件中滾動很多次才能到達顯示邏輯的代碼。毫無疑問,更易讀的代碼也是乾淨的代碼。
Robert C. Martin的 Clean Code book 也支持這個想法。事實上,本書建議在使用來自同一來源的多個類時使用通配符導入。換句話說,當我們導入從一個包中導入的兩個或多個類時,最好導入整個包。
4.2.重構輕鬆
使用通配符導入,重構更容易。例如,在重命名一個類時,我們不需要刪除其所有特定的導入聲明。
此外,如果我們將一個類從我們的一個包移動到另一個我們自己的包,如果文件中已經存在兩個包的通配符導入,我們不需要重構任何代碼。
4.3.松耦合
通配符導入在現代軟件開發中強制執行鬆散耦合方法。
根據 Robert C. Martin 的說法,使用通配符導入的想法會強制執行鬆散耦合。對於特定的導入,該類必須存在於包中。但是,通過通配符導入,包中不需要存在特定的類。其實通配符導入就是將指定的包加入到搜索路徑中,在此可以搜索到需要的類名。
因此,通配符樣式的導入不會向包添加真正的依賴關係。
5.通配符導入的缺點
通配符導入也有其缺點。接下來,讓我們看看通配符導入如何導致一些問題。
5.1。類名衝突
不幸的是,如果在多個通過通配符導入的包中找到一個類名,就會發生衝突。
在這種情況下,編譯器注意到有兩個Date
類並給出錯誤,因為在java.sql
和java.util
包中都找到了Date
類:
import java.util.*;
import java.sql.*;
public class Library {
private UUID id;
private String name;
private Time openingTime;
private Time closingTime;
private List<Date> datesClosed;
}
為了防止這樣的錯誤,我們可以指定衝突類的期望來源。
為了防止上面示例中的錯誤,我們可以在兩個現有導入中添加第三行,指定衝突Date
類的來源:
import java.util.*;
import java.sql.*;
import java.sql.Date;
5.2.不可預見的類名衝突
有趣的是,隨著時間的推移,衝突也會浮出水面,例如當一個類被添加到我們正在使用的另一個包的較新版本時。
例如,在 Java 1.1 中, List
類只能在java.awt
包中找到。但是,在 Java 1.2 中,一個名為List
的接口被添加到java.util
包中。
讓我們看一個例子:
import java.awt.*;
import java.util.*;
public class BookView extends Frame {
private UUID id;
private String name;
private Date datePublished;
private List<String> authors;
}
最終,當java.awt
和java.util
包都作為通配符導入導入時,這種情況可能會導致衝突。因此,在將代碼遷移到較新的**Java 版本**時,我們可能會遇到問題。
六,結論
在本文中,我們討論了 Java 中的import
語句以及通配符導入是什麼。我們了解了在我們的程序中使用通配符導入的優點和缺點。
通配符導入與特定導入的使用仍然是 Java 社區中的熱門爭論。簡而言之,**我們可以說通配符導入方法有優勢,但在某些情況下使用它會導致問題。**
與往常一樣,示例的源代碼可在 GitHub 上獲得。