为什么在 Java 导入语句中使用通配符不好?
使用单个语句(如
import java.awt.*;
而不是导入一堆单独的类
import java.awt.Panel;
import java.awt.Graphics;
import java.awt.Canvas;
...
在语句中使用通配符有什么问题?import
使用单个语句(如
import java.awt.*;
而不是导入一堆单独的类
import java.awt.Panel;
import java.awt.Graphics;
import java.awt.Canvas;
...
在语句中使用通配符有什么问题?import
它的唯一问题是它使本地命名空间混乱。例如,假设您正在编写一个 Swing 应用程序,因此需要 ,并且还与公司的日历系统接口,该系统具有 .如果使用通配符方法导入两者,则会发生以下三种情况之一:java.awt.Event
com.mycompany.calendar.Event
java.awt.Event
com.mycompany.calendar.Event
.*
com.mycompany.calendar.Event
显式列出所有导入的优点是,我可以一目了然地分辨出您要使用哪个类,这只会使阅读代码变得更加容易。如果你只是在做一个快速的一次性事情,没有什么明显的错误,但未来的维护者会感谢你的清晰度。
这是对明星进口的投票。import 语句用于导入包,而不是类。导入整个包装要干净得多;此处确定的问题(例如 vs)很容易通过其他手段补救,而不是通过特定的进口来真正解决,当然也不能证明所有类别的疯狂迂腐进口是合理的。没有什么比打开源文件并必须翻阅 100 个 import 语句更令人不安的了。java.sql.Date
java.util.Date
做特定的导入会使重构更加困难;如果删除/重命名类,则需要删除其所有特定导入。如果将实现切换到同一包中的其他类,则必须修复导入。虽然这些额外的步骤可以自动化,但它们实际上是生产力的打击,没有真正的收益。
如果 Eclipse 在默认情况下不执行特定的类导入,那么每个人都会执行星形导入。很抱歉,做特定的进口真的没有合理的理由。
以下是处理类冲突的方法:
import java.sql.*;
import java.util.*;
import java.sql.Date;