我们对这种方法有所了解 -
public static AbstractAttribute getAttribute(List<AbstractAttribute> attributes, String name) {
if ((attributes != null) && (name != null) && !name.trim().isEmpty()) {
for (AbstractAttribute attribute : attributes) {
if (attribute.getName().equalsIgnoreCase(name)) {
return attribute;
}
}
}
return null;
}
先验是否正确? IMO必须有一些例外检查参数逻辑,以防止&#34;客户端&#34;错误使用。 因此,如果出现错误,您必须检查使用此方法的代码,而不是认为一切正常并且&#34; list = null&#34;返回&#34; null&#34;因为即使列表为空,它也不包含某些给定的键
===========更新==== 调用该方法有4种一般情况 -
getAttribute(null,null); // returns null
getAttribute(list,null); // returns null
getAttribute(null,name); // returns null
getAttribute(list,name); // may return null if not found
所有这些都可以返回null,那么客户端如何理解不同类型的调用之间的区别?他可能错误地使用null参数调用方法 - 并且他收到了null结果,好像一切正常并且属性在列表中找不到,但它根本找不到。 嗯......不知道,但我认为必须进行arg检查......
答案 0 :(得分:1)
你应该问自己的是什么,这对开发人员更有用?
AbstractAttribute a = getAttribute(null, "name");
a.something(); // Oh no, null pointer.
或
AbstractAttribute a = getAttribute(null, "name"); // Oh no, invalid argument exception.
您的Exception
始终应尽可能接近实际问题。如果他们的参数有问题,致命地中断了方法的功能,那么抛出异常!开发人员需要知道他们的错误,责任落在你身上,以确保它尽可能清晰。
修改强>
是的,你说的是正确的。您的信息需要具体。
public Object myFunction(String something, String somethingElse) {
// First option - Not so good.
if(something == null || somethingElse == null) {
throw new IllegalArgumentException("Invalid parameters. Can not be null");
}
// Second option - much better.
if(something == null) {
throw new IllegalArgumentException("Something can not be null");
}
if(somethingElse == null) {
throw new IllegalArgumentException("Something else can not be null");
}
}