Java自定义异常:包约定?

Java自定义异常:包约定?,java,exception,Java,Exception,创建自定义异常类(例如自定义运行时异常)时,是否有特定的约定在文件夹/包结构中的何处创建它 是否所有自定义异常类都应位于同一个包中?异常类应始终与能够引发异常的类定义在同一个包中。不要仅仅为了保存异常而创建单独的包 通常,一个包应该封装一个主要的功能单元。异常是该功能的一部分 子包的创建应仅限于对类和/或方法的访问。这是通过创建“包访问”类和/或方法实现的:它们既不是公共的,也不是受保护的,也不是私有的。没有访问修饰符意味着它们只对同一包中的类可见。如果您没有任何此类类或方法,则可能不应该制作子

创建
自定义异常类
(例如自定义运行时异常)时,是否有特定的约定在
文件夹/包
结构中的何处创建它


是否所有自定义异常类都应位于同一个包中?

异常类应始终与能够引发异常的类定义在同一个包中。不要仅仅为了保存异常而创建单独的包

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

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


不应为以下内容创建子包:

  • 将几个碰巧有一些共同点的类分组。(注意,JavaSE中没有java.text.format、java.net.socket或javax.swing.button包。)
  • 因为包中似乎有太多类,所以将其拆分。(在一个包中包含50个类没有什么错。)

相同的包装?不。但它们都必须扩展Throwable或其任何子类。不,您不应该创建单独的包。请参阅“按功能打包”:检查Java的异常是如何组织的,并使用相同的方法。@rajuGT RuntimeException,你的意思是。还有一个java.lang.Runtime,所以你对速记的选择可能会让人困惑。大多数人将异常类放在逻辑相关的包中,并维护每种关联类型的松散异常。我倾向于更进一步,在抛出它们的类的内部类中创建例外,尽管人们对此有不同的看法-我被告知“天哪,不要恨,停止坏”和“哦,多聪明/干净”…“不应该为…创建子包”谁说的?当分解的主模式是功能模式时,您列出的两个示例都有效。通常,按技术问题进行组织在包层次结构中处于较低的位置。@btiernay说JavaSE。我看不到任何异常,只有子包。@VGR
子包的创建应该只限制对类和/或方法的访问
-所以您想强调一下,包的唯一功能是封装?你完全否认软件包是构造代码的手段?@Max是的,没错。例外情况不是结构的一部分。单独的软件包是主要的功能单元。@ VGR,嗯,我知道你有这个观点,我不清楚为什么你不考虑在不同的层次上有不同用途的包(作为语言工具)。我的意思是类似smth的软件包是按功能划分的(我们有3-4个选择中的最佳设计选择),但在较低的级别上,软件包可以具有结构或功能分解的角色。