为什么不允许用 import *

2020-06-29 11:44:22 +08:00
 rizon

Java 语言

有些公司 有很多各种规定,其中一个代码规范就是不允许使用 import a.b.c.* 这样的。

这是为什么??

7007 次点击
所在节点    Java
30 条回复
kop1989
2020-06-29 11:45:20 +08:00
怕下文使用的时候,用错类?
sean10
2020-06-29 11:46:01 +08:00
命名空间污染?
如果 2 个模块里有同名方法,那不就 gg 了, 用错出问题的时候, 排查这个很浪费时间
cheng6563
2020-06-29 11:52:31 +08:00
都是 IDE 自动 import 的,他爱 import 啥样就啥样,不管的。
optional
2020-06-29 11:59:42 +08:00
ide 还好,code review 的时候,谁知道一个类是哪来的?
optional
2020-06-29 11:59:51 +08:00
@cheng6563 ide 可以改设置的。
gsls200808
2020-06-29 12:30:24 +08:00
IDE 如果把一个包下所有类全导的话也会合并成*的,楼主的提问 提升编译效率,编译同名类冲突。实际上,同名类这种冲突编译期就会报出来了,编译效率提升也不是非常多。
XanderChen
2020-06-29 13:00:49 +08:00
想要严格的控制导入的东西呗,用的导,用不到的不导。
lululau
2020-06-29 13:14:29 +08:00
我作为一个技术部门小领导,总得整点什么事,好跟我的上司说我都办了哪些事情吧?要不然呢,让我回去写代码吗?
fatestigma
2020-06-29 13:28:01 +08:00
import * 真的是写的爽,看代码的时候就很头疼了,根本不知道从哪里来的,还得挨个 OpenGrok 搜,有的方法名还重复率非常高。再遇上 C++的 include 和一堆 use namespace,代码真是没法读了。
jzmws
2020-06-29 14:53:20 +08:00
一般不会遇到问题 要是遇到问题就是大坑了 . com.aa.xx.User 这个类 , 用* 导入 你其实是要用 com.bb.xx.User 这个类 然后就 gg 了
jzmws
2020-06-29 14:53:46 +08:00
@jzmws 不过 ide 会自动优化导包也是一个坑
wujieyuan
2020-06-29 15:41:30 +08:00
你妈让你叫几个长辈过来吃饭, 你发现几个长辈都是同一个王, 于是你为了省事用大喇叭把全村姓王都叫过来吃饭了
kop1989
2020-06-29 15:43:46 +08:00
@wujieyuan #12 关键他妈让他向王舅舅敬酒,结果他给王大爷敬了个……😂
GM
2020-06-29 15:47:41 +08:00
#4 楼正解。

其实我还碰到一种情况:

最近有个小项目使用 C#,C#的 import 和 Java 不一样,它的每个 import 语句都是导入指定命名空间下的所有类,相当于所有 import 都是 import my.namespace.*,结果重构、排除编译错误的就非常恶心。

有时候需要把某个类从一个子模块移到另一个子模块,然后问题就来了,移动过去后,从代码里根本不知道这个类里引用到的其他类是从哪个命名空间的导入的,进而也就不知道它是属于哪个 dll (相当于 java 里的 jar 包),只能终止重构,恢复源代码回去查看,然后再重新来过。
MerlinShieh
2020-06-29 15:51:00 +08:00
我这边 Python 规范就是禁止使用 import * 和 from xxx import xxx 。觉得在后面引用时太长了就导入时重命名
TtTtTtT
2020-06-29 16:09:03 +08:00
糖化语法向来就是这样的,在便捷性和可读性上,不同级别的项目取舍是不一样的。
Mohanson
2020-06-29 16:11:37 +08:00
看 c 代码经常能看到 "我知道我在做什么" 的注释然后强制跳过编译器语法检查的…

个人看来这些规范,范式可以拿来用,但不必当教条,适合自己的开发习惯就好。
atonku
2020-06-29 16:16:34 +08:00
禁止 public class
zsdroid
2020-06-29 17:20:06 +08:00
所以为什么不像 php 那样出个 as
```
import a.b.c.user as cUser;
import a.b.d.user as dUser;
```
GINLSL
2020-06-29 18:32:25 +08:00
@GM 以前 VS 的代码提示功能,还只能提示已经 using 进来的命名空间中的类。现在改了全局都能提示,好多了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/685565

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX