使用 Java 的默认包是一种不好的做法吗?
Posted
技术标签:
【中文标题】使用 Java 的默认包是一种不好的做法吗?【英文标题】:Is the use of Java's default package a bad practice? 【发布时间】:2011-12-12 13:27:35 【问题描述】:【问题讨论】:
我对在尝试从其他“真实”包中引用该包中的类时使用默认包引起的问题有模糊的记忆。 是的,除非您正在编写一次性代码。 取决于你在做什么。对于一类 Java 作业来说,这很好。其他任何东西——只要把它放在一个命名的包里,你就安全了。 “这句话可能会让我通过质量检查。”如果您需要添加一个完全无用的句子来发布您的问题,那么在当前状态下可能不值得提出。 由于某种原因,这得到了“接近”的投票——这是不正确的。这个问题不是基于“意见”的。这有充分的理由,答案很好地涵盖了这一点。请从“激进的近距离投票”中避免这一点 【参考方案1】:是的,是的。理想情况下,包名应该是全局唯一的,以避免命名冲突。使用默认包打破了这个约定。从默认包中导入类也是不可能的。
如果这是一个坏主意,为什么还存在未命名的包?来自the JLS §7.4.2:
Java 平台提供未命名的包主要是为了方便开发小型或临时应用程序或刚开始开发时。
【讨论】:
...直到其他人与您有相同的思路。只使用命名包有什么问题? @irreputable 我喜欢你的逻辑。 ...是的,但是他们担心像我这样的人所以他们都决定不使用它。 “没有人使用默认包”[citation-needed]
为什么为了方便而提供本质上是不好的做法是个好主意呢?为什么标准/规范不简单地要求所有类都具有包名称作为所需的最小语法的一部分,所以没有未命名的包开始? IDE 可以在内部配置为具有名为“默认”的包,例如,“项目名称”、“项目名称-团队名称”或其他一些预设字符串/模板。如果你懒惰、学习或根本不需要多个包,IDE 可以封装强制包命名。【参考方案2】:
存在许多不同层面的问题:
您不能从非默认包中的类导入默认包中的类 如果您尝试解决多个工件中的默认包,则会遇到类加载问题 您不能再像往常一样使用默认和受保护范围 您的代码与其他代码没有明显区别【讨论】:
【参考方案3】:是的,是的。问题是无法从默认包中导入类。
【讨论】:
以上是关于使用 Java 的默认包是一种不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章
是否有任何其他原因我应该考虑忽略发出默认值是一种不好的做法?