我正在阅读J. Bloch的Effective Java,现在我在关于checked/unchecked exceptions的部分。他说,(强调雷):理解捕获检查的异常
由API用户与检查异常,在API设计 预sents的任务是从状态中恢复对抗。用户 通过捕捉异常并忽略它的任务,但 这通常是坏主意(项目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);
}
的事情是我不知道我应该放什么异常处理器。我进行访问的,如果条件检查:
f(Modifier.isStatic(f.getModifiers()) &&
Modifier.isPublic(f.getModifiers()))
因此IllegalAccessViolation
将永远不会被抛出。此外,为什么IllegalAccessViolation
被选中似乎有点困惑。我认为这是一个编程错误,并judjing他所说的:
使用checked异常从中调用者可以 合理预期收回条件
[...]
使用运行时例外 表明编程错误
我虽然它应该是一个未经检查的。
问:是,如果我们确保了expcetion将永远不会被以前在什么地方抛出它认为适当的离开检查异常空的哈德勒?
其实很好的建议。非常感谢。 –