之间最大的区别
assert false;
(不需要括号,
assert不是函数而是语句。)和
throw new RuntimeException();
是断言可以被禁用。实际上,默认情况下它 是 默认禁用的,除非JVM使用
-ea(“启用声明”)标志启动。如果启用了断言,
assertfalse将无条件引发
AssertionError从派生的
Error。但是由于可以禁用断言,因此存在两个问题,
- 该错误可能未被发现,
- 控制流分析需要
return
在assert
(之后很杂乱)之后添加一个伪语句。
因此,在上述情况下,我当然会明确(更简洁)
throw new AssertionError("invalid type " + type);而不是
assert后面跟一个假人
return。
如评论中所述,这是假定它
type是一个内部参数,而无效值表示逻辑本身存在错误。如果它是输入参数,则应根据通常的规则对其进行验证,
IllegalArgumentException如果验证失败,则将其抛出。



