《Google Java编程规范》里有这么一条:
3.3.1 import不要使用通配符
即,不要出现类似这样的import语句:import java.util.*;
不少公司也的确是这么要求的。但是当我面试时问起为什么不要这么用的时候,不少人就开始语焉不详了。
其实稍微有点儿心的人,稍微花个几分钟,就可以从网上搜到这个问题的答题。诸如:
- 会导致不同包的同名类之间会有冲突。比如java.util.Date和java.sql.Date
- 使用具体的完整的类名,每个类的来源会更明确,代码会更好读。
- 编译速度更快。
更有意思的讨论,可以移步到这里观战。
然而我写这篇文章,并不是为了解释为什么不要用import *。
恰恰相反,我想说的是:上面说的这些不要用import *的原因,听上去是有一定道理,但是其实全是放屁。
- 对于类名冲突的问题。要考虑是代码的分层是否合理?类的命名是否合理。自己把一个类名叫Thread,还要和处理多线程的代码放一起用,不去反思自己类名是不是起得太混蛋,代码分层是是不是太混乱,然后还跑去怪编译器处理不了。不知道是谁给你这么厚的脸皮的?不拿去磨刀真是可惜了。
- 在这个AI都叫嚣着要写代码的年代,你还把各种IDE当记事本用,别人写个import *,就说自己找不到这个类是在哪儿定义的,还说这代码不好读。想用代码行数算工资就直说,不用这么拐弯抹角的。
- 先去把测试代码里的Thread.sleep(1000)处理干净啊。就现在这些工业代码,还不需要计较import *与否造成的性能差异。你真要计较这些,也要先测试一下自己码代码的手速。1分钟之内没办法把26个英文字母打10遍,按你的逻辑就是,你的手速太影响开发效率了,不适合当程序员。麻溜的,主动辞了吧。
最后,再补充一下。我也不是在说import *,我是在说所有的这些,不过脑子,不讲道理或是讲着歪理,然后单纯就是这么做着的,一切屁事儿。