gpt4 book ai didi

java - 如果将非法参数传递给 API 方法,何时抛出异常?

转载 作者:搜寻专家 更新时间:2023-11-01 01:36:43 26 4
gpt4 key购买 nike

请参阅下面的两个示例。假设这两个类都包含属于广泛使用的 API 库的公共(public)方法。

AClass.java 更容易编写(可能由于噪声较小而更易于阅读),但是当检测到错误时,堆栈跟踪中的第一个方法是内部方法(nullCheck( ...)) 并且异常消息未引用该方法。这会不会给用户造成不必要的混淆?我的意思是在用户思考的意义上:“这是一个抛出异常的内部方法,一定是库中的错误,而不是我的程序中的错误。多么无用的库。**。 ..”

BClass.java 写起来更麻烦(带有所有 if 语句),但是当检测到错误时,堆栈跟踪的第一行会指出错误所在的 API 方法(由用户调用)首次检测到。这是否更有可能让用户认为:“我正在从我的代码中调用该方法,我传入的参数一定有问题”。

在公共(public) API 中检查参数的有效性时,抛出异常的首选方式是什么?或者这两个示例是否被认为是相等的?

public class AClass {
public void publicApiMethod1(String a){
nullCheck(a, "a");
// do something...
}
public void publicApiMethod2(String a, String b, String c){
nullCheck(a, "a");
nullCheck(b, "b");
nullCheck(c, "c");
// do something...
}

private void nullCheck(Object a, String argName) {
if(a == null){
throw new NullPointerException("Null argument: " + argName);
}
}
}


public class BClass {
public void publicApiMethod1(String a){
if(a == null){
throw new NullPointerException("Null argument: 'a'");
}
// do something...
}

public void publicApiMethod2(String a, String b, String c){
if(a == null){
throw new NullPointerException("Null argument: 'a'");
}
if(b == null){
throw new NullPointerException("Null argument: 'b'");
}
if(c == null){
throw new NullPointerException("Null argument: 'c'");
}
// do something...
}
}

最佳答案

如果您的错误消息是描述性的(确实如此),那么没有人会费心去查看堆栈跟踪。因此第一种形式更好,因为它封装了验证逻辑。

请注意,各种库中有大量断言方法可供使用,请参阅:Objects.requireNonNullValidate.notNull ).

关于java - 如果将非法参数传递给 API 方法,何时抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10807229/

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