gpt4 book ai didi

java - 记录未经检查的异常

转载 作者:行者123 更新时间:2023-11-30 08:44:56 25 4
gpt4 key购买 nike

我正在阅读 J. Bloch 的 effective Java,现在我正在阅读有关记录未经检查的异常的部分。他说

Use the Javadoc @throws tag to document each unchecked exception that a method can throw [...].

public interface Parameters {
//other method ommited

/**
* __DESCRIPTION_OMMITED__
*
* @throws ParameterAlreadyExistsException If a parameter with the same name already exists in this container.
*/
public <M> void put(ParameterMetaData<M> p, M value);
}

哪里public interface ParameterMetaData<ValueType>{ }只是确保编译时类型安全的标记。 ParameterAlreadyExistsExceptionRuntimeException 的直接子类.

这是它的基本实现:

public final class ParametersImpl implements Parameters{

private final Map<ParameterMetaData<?>, Object> parameters;

@Override
public <M> void put(ParameterMetaData<M> p, M value){
if(value == null)
return;
if(parameters.containsKey(p))
throw new ParamAlreadyExistsException(String.format("The parameter with the name %s already exists. Value: %s", p.getClass(), parameters.get(p)));
try{
parameters.put(p, value);
} catch (Exception e){
throw new RuntimeException(String.format("Parameter insertion failed. ParameterMetaData: %s Value: %s", p.getName(), value), e);
// ^----------------Here non-documented exception is thrown.
}
}

//remainders ommited
}

Map#put(K, V)方法抛出,我的实现使用它并抛出 RuntimeException如果出现问题,我应该如何记录该事实?我应该这样做吗?目前可能很难根据接口(interface)文档判断抛出 RuntimeException 的原因。

问题:我应该如何处理特定于实现的异常?我应该记录它们吗?

最佳答案

How should I deal with implementation specific exceptions? should I document them?

你不知道。就像 JB Nizet 在评论中指出的那样,这是一个错误,您应该测试/修复这些类型的问题。

如果您担心向用户显示内部错误,您可以显示一般错误,例如“发生未知错误”。在您的日志记录中,您可以记录实际的异常,以便您的用户可以向您报告错误,并且您可以查看出了什么问题。

关于java - 记录未经检查的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33560902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com