- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我有一个名为 Puzzle
的类,以及它的两个(相关)构造函数。一个构造函数不接受任何参数,另一个构造函数接受一个 int,但也会引发异常。基本思想是这样的:
public class Puzzle {
// Fields, methods, etc.
public Puzzle() {
this(3);
}
public Puzzle(int n) throws Exception {
if (n < 2) throw new Exception();
// More constructor code
}
}
当然,这不能编译,因为采用 int 的构造函数会抛出异常,而没有 args 的构造函数不会处理或抛出异常。但是,由于很明显永远不会抛出异常(构造函数体内不再抛出异常),所以这应该不重要。我可以使用一个空白的 try-catch 语句,如下所示:
public Puzzle() {
try {
this(3);
} catch (Exception e) {
// Never happens
}
}
这里的问题是对 this(3)
的调用不再是构造函数的第一条语句,因此它无法编译。似乎我必须用 throws
子句标记这个构造函数,即使我知道它永远不会抛出异常。这真的很烦人,因为调用代码将需要有不必要的 try-catch block ,否则它们也必须抛出异常。我缺少一种优雅的解决方法吗?我知道我可以轻松地复制和粘贴一些代码,但这违背了 OOP 中神圣的原则。有什么想法吗?
最佳答案
使用运行时异常。具体来说,IllegalArgumentException 就是为此而设计的。
关于java - 如何在构造函数中避免这种不必要的 throws 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13672222/
jQuery attributeContainsPrefix [name^="value"] 对比 attributeStartsWith [name|="value"] 实际区别是什么? 最佳答案
在1.1部分在RFC 6749中,有四种角色:资源拥有者、资源服务器、客户端和授权服务器。 如果客户端和资源所有者是同一实体,OAuth 是否变得多余或不必要? 例如,我有一个封闭的 API 和一个面
我有一段代码,其中有一个带有保护子句的 raise 语句: def validate_index index # Change to SizeError raise ArgumentError
我看到了这篇文章( JPA Entity Lifecycle Events vs database trigger ),但它并没有像我在这里那样明确地询问: 当我插入 PK 值为 (null) 的行时
所以,我有一段代码看起来像 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2){ // Do something }
我是一名优秀的程序员,十分优秀!