【发布时间】:2018-12-17 23:18:55
【问题描述】:
考虑以下代码(java 8):
try
{
// try to create an instance of CardExpirationDate
AfCardExpirationDate.getInstance( anExpMonth, anExpYear);
return true; // expiration date is valid
}
catch ( IllegalArgumentException e )
{
// invalid expiration date
return false;
}
从未使用过调用AfCardExpirationDate.getInstance的结果。我们仅在它是否抛出 IllegalArgumentException 时检查这里。
这样安全吗?或者编译时或运行时代码优化器可以去掉这样的调用吗?
【问题讨论】:
-
创建一个像
AfCardExpirationDate.isValid(anExpMonth, anExpYear)这样的逻辑而不是实际赋予异常意义不是更简单吗?对我来说,感觉就像是对异常的滥用。 -
它必须是一个相当粗心的优化器,假设
getInstance()不会有任何副作用。 -
该方法可以内联,任何未使用的结果都可以丢弃。但是,触发异常的检查不能被丢弃(除非检查是
static final boolean,例如断言)
标签: java compiler-optimization jit