rizon
V2EX  ›  Java

为什么不允许用 import *

  •  
  •   rizon ·
    othorizon · Jun 29, 2020 · 8642 views
    This topic created in 2321 days ago, the information mentioned may be changed or developed.

    Java 语言

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

    这是为什么??

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

    其实我还碰到一种情况:

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

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

    个人看来这些规范,范式可以拿来用,但不必当教条,适合自己的开发习惯就好。
    atonku
    atonku
    Jun 29, 2020
    18
    禁止 public class
    zsdroid
    zsdroid
    Jun 29, 2020
    19
    所以为什么不像 php 那样出个 as
    ```
    import a.b.c.user as cUser;
    import a.b.d.user as dUser;
    ```
    GINLSL
    GINLSL
    Jun 29, 2020
    20
    @GM 以前 VS 的代码提示功能,还只能提示已经 using 进来的命名空间中的类。现在改了全局都能提示,好多了。
    GM
    GM
    Jun 29, 2020
    21
    @GINLSL C# 这东西,好用的地方很好用,不好用的地方也很让人不爽。不强制 namespace 和目录结构一样也是个比较恶心的地方,容易出现不对应,影响阅读源码。
    jim9606
    jim9606
    Jun 29, 2020
    22
    IDE 自动 import 一般都不会出现 import a.b.*这样的。
    不过我觉得 import java.util.*没什么问题
    jeffh
    jeffh
    Jun 29, 2020
    23
    现在都是 ide 自动导入的了,没必要限制这么严格吧
    itskingname
    itskingname
    Jun 29, 2020
    24
    楼主问的是 Java,我写了一篇公众号说明为什么 Python 里面禁止使用 import *

    https://mp.weixin.qq.com/s/bFmCbzgxLjTZWFbleBVrDA
    SilencerL
    SilencerL
    Jun 29, 2020
    25
    @GM #14
    如果你开心的话用 using static 也是可以的...

    using Example = Test.Demo.Example; // Test 是个类
    using AnotherExample = OtherTest.Demo.Example; // 还可以当作别名防止重复类名的困扰
    GM
    GM
    Jun 29, 2020
    26
    @SilencerL 这种需要手动写,每个字母都要自己打,用起来也挺郁闷的,IDE 默认都是给你 using My.Namespace;
    goodboy95
    goodboy95
    Jun 29, 2020
    27
    话说楼上写代码都用 vim 吗?我一般看代码都是 ctrl+alt+b (idea) 或者 F12 (VS / VS code)直接看函数在哪个文件。而且写代码的时候真的很少碰到类名重复的情况,毕竟一个文件就 import 那么多东西,有几次遇见重复的也不至于在写代码过程中看不出来(毕竟里面的变量和方法完全不一样了)
    optional
    optional
    Jun 29, 2020 via iPhone
    28
    @goodboy95 你肯定不 review 代码。。。
    wuketidai
    wuketidai
    Jun 29, 2020
    29
    显式优于隐式
    skypyb
    skypyb
    Jun 29, 2020
    30
    Collectors 类, 你们都不静态导入*的嘛?
    这玩意不静态导入代码会挺丑陋的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2451 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 86ms · UTC 11:07 · PVG 19:07 · LAX 03:07 · JFK 06:07
    ♥ Do have faith in what you're doing.