一、概述
在本教程中,我们将讨论在Java 中使用通配符导入的优点和缺点。
2. Java 中的导入
Javaimport
语句声明代码中使用的名称(类名、静态变量和方法名)的来源。
例如,让我们看一个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 社区中的热门争论。简而言之,**我们可以说通配符导入方法有优势,但在某些情况下使用它会导致问题。**
0 评论