使用像这样的单个语句更方便、更简洁
import java.awt.*;
而不是导入一堆单独的类
import java.awt.Panel;
import java.awt.Graphics;
import java.awt.Canvas;
...
在 import
语句中使用通配符有什么问题?
原文由 jnancheta 发布,翻译遵循 CC BY-SA 4.0 许可协议
这里 给 明星进口投票。 import 语句旨在导入 _包_,而不是类。导入整个包要干净得多;此处确定的问题(例如 java.sql.Date
vs java.util.Date
)很容易通过其他方式解决,并没有通过特定的进口 真正 解决,当然也不能证明对所有类别的疯狂学究进口是合理的。没有什么比打开源文件不得不翻阅 100 条导入语句更令人不安的了。
进行特定的导入会使重构更加困难;如果你删除/重命名一个类,你需要删除它的 所有 特定导入。如果将实现切换到同一包中的不同类,则必须修复导入。虽然这些额外的步骤可以自动化,但它们确实会影响生产力,并没有真正的收益。
如果默认情况下 Eclipse 不执行特定的类导入,那么每个人仍然会执行 star 导入。抱歉,进行特定进口确实没有合理的理由。
以下是处理类冲突的方法:
import java.sql.*;
import java.util.*;
import java.sql.Date;
原文由 davetron5000 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
唯一的问题是它使您的本地命名空间变得混乱。例如,假设您正在编写一个 Swing 应用程序,因此需要
java.awt.Event
,并且还与公司的日历系统交互,该系统具有com.mycompany.calendar.Event
。如果您使用通配符方法导入两者,则会发生以下三种情况之一:java.awt.Event
和com.mycompany.calendar.Event
之间存在彻底的命名冲突,因此您甚至无法编译。.*
),但它是错误的,你很难弄清楚为什么你的代码声称类型是错误的。com.mycompany.calendar.Event
,但是当他们后来添加一个时,您以前有效的代码突然停止编译。显式列出所有导入的好处是我可以一眼看出您打算使用哪个类,这使得阅读代码变得更加容易。如果你只是做一件快速的一次性事情,没有什么明显的 _错误_,但未来的维护者会感谢你的清晰说明。