我正在阅读 J. Bloch 的 Effective Java,现在我正在阅读有关已检查/未检查异常的部分。他说(强调我的):
通过让 API 用户面对已检查的异常,API 设计者提出了从条件中恢复的任务。用户可以通过捕获异常并忽略它来忽略授权,但这通常是一个坏主意(第 65 条)。
现在,考虑一个返回具有相同类型或子类型的类的所有静态数据成员列表的方法:
public static <T> List<? extends T> getPublicStaticFields(Class<T> clazz){
List<T> fields = new ArrayList<>();
for(Field f : clazz.getDeclaredFields()){
if(Modifier.isStatic(f.getModifiers()) &&
Modifier.isPublic(f.getModifiers())){
Object fieldValue;
try {
fieldValue = f.get(null);
if(clazz.isAssignableFrom(fieldValue.getClass()))
fields.add((T) fieldValue);
} catch (IllegalAccessException e) { } // <------- Ignoring the execption
}
}
return Collections.unmodifiableList(fields);
}
问题是我不知道应该在异常处理程序中放什么。我在 if 条件下执行访问检查:
f(Modifier.isStatic(f.getModifiers()) &&
Modifier.isPublic(f.getModifiers()))
因此IllegalAccessViolation
永远不会被抛出。IllegalAccessViolation
此外,为什么要检查似乎有点困惑。我认为这是一个编程错误,根据他的话来判断:
对可以合理预期调用者恢复的条件使用检查异常
[...]
使用运行时异常来 指示编程错误
我虽然它应该是一个不受约束的。
问题:如果我们确保永远不会在某个地方抛出异常,那么将已检查异常的处理程序留空是否合适?