【问题标题】:Java Custom exceptions: Package convention?Java 自定义异常:包约定?
【发布时间】:2016-02-02 12:23:24
【问题描述】:

在创建 custom exception class(例如自定义运行时异常)时,是否有特定约定在 folder/package 结构中的何处创建它?

所有自定义异常类都应该在相同包中吗?

【问题讨论】:

  • 同一个包?不,但它们都必须扩展 Throwable 或其任何子类。
  • 不,您不应该创建单独的包。请参阅“按功能打包”:javapractices.com/topic/TopicAction.do?Id=205
  • 检查 Java 的异常是如何组织的并使用相同的方法。
  • @rajuGT RuntimeException,你的意思是。还有一个 java.lang.Runtime,所以您选择的速记可能会令人困惑。
  • 一般来说没有“正确的方法”。大多数人将异常类放入逻辑相关的包中,并为每个关注类型的关联维护一个松散的异常。我倾向于更进一步,并在抛出异常的类的内部类中设置异常,尽管人们对此有不同的看法——有人告诉我“天哪,不要讨厌停止坏事”和“哦,多么聪明/干净”。 ..

标签: java exception


【解决方案1】:

异常类应始终定义在与能够抛出它的类相同的包中。永远不要仅仅为了保存异常而创建单独的包。

一般来说,一个包应该封装一个主要的功能单元。异常是该功能的一部分。

只应创建子包以限制对类和/或方法的访问。这是通过创建“包访问”类和/或方法来完成的:它们既不是公共的,也不是受保护的,也不是私有的。没有访问修饰符意味着它们仅对同一包中的类可见。如果您没有任何此类或方法,您可能不应该制作子包。

子包应该被创建用于:

  • 将碰巧有一些共同点的几个类分组。 (请注意,Java SE 中没有 java.text.format 或 java.net.socket 或 javax.swing.button 包。)
  • 分解一个包,因为它似乎有太多的类。 (一个包中包含 50 个类并没有错。)

【讨论】:

  • “不应该为...创建子包”谁说的?当分解的主要模式起作用时,您列出的两个示例都是有效的。通常按技术问题组织在包层次结构中较低。
  • @btiernay 说 Java SE。 Here’s the list of all packages. 我没有看到任何仅例外的子包。
  • @VGR Subpackages should only be created to limit access to classes and/or methods - 所以你要强调包的only功能是封装?你完全否认包是结构你的代码的手段吗?
  • @Max 是的,完全正确。异常不是结构的一部分。单独的包用于主要功能单元。
  • @VGR,好吧,我理解你有这个观点,我不清楚的是为什么你不认为 package(作为语言工具)在不同的层级有不同的用途我>。我的意思是 smth like - 在顶部 - 包是按功能(我们有 3-4 个选择中的最佳设计选择),但是 - 在较低级别 - 包可以具有结构或功能分解的作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多