背景
最近在给 apache shardingsphere
提代码的时候,有一个比较有意思的规范,就是不允许使用 import *
去导入包

import *
在自己开发认知中,其实一直都是使用的import *
这玩意去导包的,包括idea的import *
默认也是超过5个相同包就给你合并使用import *
导入

突然给提了这个规范就打算研究下单个类的导入和import *
导入的一个区别。
其实java是有两种中导包机制的
-
单类型导入(single-type-import):例如 import java.util.List;
-
按需类型导入(type-import-on-demand):例如 import java.util.*;
平时我们开发因为idea配置,所以导入相同包下面的类多了基本都会自动转换为按需类型导入(type-import-on-demand)
,所以其实只要我们使用统一的idea配置也是无感知的。如果团队中所有人都是使用这种方式,你一个人改为单类型导入(single-type-import)方式可能就会经常出现代码冲突。所以单从这点来看我们需要团队有一个统一的开发规范
性能方面
其次在研究过程中我还发现是有一些编译性能差异的,但是不会对运行时的性能产生任何影响 因为Java编译器是按如下顺序寻找类的
-
在显示导入的类中 -
在包中 -
最后再寻找通配符相关的包
就像下面两个例子。虽然
package something;
import java.util.*;
//....
Set set = null; // something.Set
//....
这里是不知道Set是什么Set
package something;
import java.util.Set;
//....
Set set = null; // java.util.Set
//....
这里就明确知道了Set 是 java.util.Set
命名冲突
比如两个类的名字相同会导致编译错误 网上最常见的例子就是同时导入
import java.awt.*
import java.util.*
List就会编译错误,虽然现在awt
相关的类我们开发基本不会用到,但是使用import *
确实会有这个问题
总结
-
使用 import *
会影响一点编译时期的运行效率 -
会产生命名冲突(实际少有遇到) -
不使用 import *
会导致看到很多显示的导入,有的人觉得不舒服
总的来说使用import *
是更好一点,像技术极客追求规范就应该会禁止使用import *
,相对传统的业务开发看来使用import *
好像也没什么影响。总体来说还是要看开发团队的规范
原文始发于微信公众号(小奏技术):关于Java为什么不推荐使用 import *导包这件小事
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/29976.html