【发布时间】:2015-11-02 06:25:01
【问题描述】:
我正在阅读 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 似乎有点困惑。我认为这是一个编程错误,根据他所说的来判断:
对调用者可以使用的条件使用检查异常 预计会恢复
[...]
使用运行时异常 指出编程错误
我虽然它应该是一个不受约束的。
问题:如果我们确保永远不会在某个地方抛出异常,那么将已检查异常的处理程序留空是否合适?
【问题讨论】:
标签: java exception checked-exceptions