Java 语言
有些公司 有很多各种规定,其中一个代码规范就是不允许使用 import a.b.c.*
这样的。
这是为什么??
1
kop1989 2020-06-29 11:45:20 +08:00
怕下文使用的时候,用错类?
|
2
sean10 2020-06-29 11:46:01 +08:00
命名空间污染?
如果 2 个模块里有同名方法,那不就 gg 了, 用错出问题的时候, 排查这个很浪费时间 |
3
cheng6563 2020-06-29 11:52:31 +08:00 via Android
都是 IDE 自动 import 的,他爱 import 啥样就啥样,不管的。
|
4
optional 2020-06-29 11:59:42 +08:00 7
ide 还好,code review 的时候,谁知道一个类是哪来的?
|
6
gsls200808 2020-06-29 12:30:24 +08:00 via iPhone
IDE 如果把一个包下所有类全导的话也会合并成*的,楼主的提问 提升编译效率,编译同名类冲突。实际上,同名类这种冲突编译期就会报出来了,编译效率提升也不是非常多。
|
7
XanderChen 2020-06-29 13:00:49 +08:00
想要严格的控制导入的东西呗,用的导,用不到的不导。
|
8
lululau 2020-06-29 13:14:29 +08:00 1
我作为一个技术部门小领导,总得整点什么事,好跟我的上司说我都办了哪些事情吧?要不然呢,让我回去写代码吗?
|
9
fatestigma 2020-06-29 13:28:01 +08:00
import * 真的是写的爽,看代码的时候就很头疼了,根本不知道从哪里来的,还得挨个 OpenGrok 搜,有的方法名还重复率非常高。再遇上 C++的 include 和一堆 use namespace,代码真是没法读了。
|
10
jzmws 2020-06-29 14:53:20 +08:00
一般不会遇到问题 要是遇到问题就是大坑了 . com.aa.xx.User 这个类 , 用* 导入 你其实是要用 com.bb.xx.User 这个类 然后就 gg 了
|
12
wujieyuan 2020-06-29 15:41:30 +08:00 2
你妈让你叫几个长辈过来吃饭, 你发现几个长辈都是同一个王, 于是你为了省事用大喇叭把全村姓王都叫过来吃饭了
|
14
GM 2020-06-29 15:47:41 +08:00
#4 楼正解。
其实我还碰到一种情况: 最近有个小项目使用 C#,C#的 import 和 Java 不一样,它的每个 import 语句都是导入指定命名空间下的所有类,相当于所有 import 都是 import my.namespace.*,结果重构、排除编译错误的就非常恶心。 有时候需要把某个类从一个子模块移到另一个子模块,然后问题就来了,移动过去后,从代码里根本不知道这个类里引用到的其他类是从哪个命名空间的导入的,进而也就不知道它是属于哪个 dll (相当于 java 里的 jar 包),只能终止重构,恢复源代码回去查看,然后再重新来过。 |
15
MerlinShieh 2020-06-29 15:51:00 +08:00
我这边 Python 规范就是禁止使用 import * 和 from xxx import xxx 。觉得在后面引用时太长了就导入时重命名
|
16
TtTtTtT 2020-06-29 16:09:03 +08:00
糖化语法向来就是这样的,在便捷性和可读性上,不同级别的项目取舍是不一样的。
|
17
Mohanson 2020-06-29 16:11:37 +08:00 via Android
看 c 代码经常能看到 "我知道我在做什么" 的注释然后强制跳过编译器语法检查的…
个人看来这些规范,范式可以拿来用,但不必当教条,适合自己的开发习惯就好。 |
18
atonku 2020-06-29 16:16:34 +08:00
禁止 public class
|
19
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; ``` |
21
GM 2020-06-29 18:36:05 +08:00
@GINLSL C# 这东西,好用的地方很好用,不好用的地方也很让人不爽。不强制 namespace 和目录结构一样也是个比较恶心的地方,容易出现不对应,影响阅读源码。
|
22
jim9606 2020-06-29 18:52:05 +08:00
IDE 自动 import 一般都不会出现 import a.b.*这样的。
不过我觉得 import java.util.*没什么问题 |
23
jeffh 2020-06-29 18:55:31 +08:00
现在都是 ide 自动导入的了,没必要限制这么严格吧
|
24
itskingname 2020-06-29 18:56:13 +08:00
|
25
SilencerL 2020-06-29 19:02:50 +08:00
@GM #14
如果你开心的话用 using static 也是可以的... using Example = Test.Demo.Example; // Test 是个类 using AnotherExample = OtherTest.Demo.Example; // 还可以当作别名防止重复类名的困扰 |
26
GM 2020-06-29 19:21:43 +08:00
@SilencerL 这种需要手动写,每个字母都要自己打,用起来也挺郁闷的,IDE 默认都是给你 using My.Namespace;
|
27
goodboy95 2020-06-29 19:43:53 +08:00
话说楼上写代码都用 vim 吗?我一般看代码都是 ctrl+alt+b (idea) 或者 F12 (VS / VS code)直接看函数在哪个文件。而且写代码的时候真的很少碰到类名重复的情况,毕竟一个文件就 import 那么多东西,有几次遇见重复的也不至于在写代码过程中看不出来(毕竟里面的变量和方法完全不一样了)
|
29
wuketidai 2020-06-29 20:05:00 +08:00
显式优于隐式
|
30
skypyb 2020-06-29 20:14:47 +08:00
Collectors 类, 你们都不静态导入*的嘛?
这玩意不静态导入代码会挺丑陋的。 |