- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有 .NET 背景,现在正在涉足 Java。
目前,我在设计一个针对错误输入的防御性 API 时遇到了很大的问题。假设我有以下代码(足够接近):
public void setTokens(Node node, int newTokens) {
tokens.put(node, newTokens);
}
但是,此代码可能因以下两个原因而失败:
null
节点。在 .NET 中,我会抛出一个 ArgumentNullException
(而不是 NullReferenceException
!)或 ArgumentException
分别将有问题的参数 (node
) 的名称作为 string
参数传递。
Java 似乎没有等效的异常。我意识到我可以更具体,只抛出最接近描述情况的任何异常,或者甚至为特定情况编写我自己的异常类。
这是最佳做法吗?或者.NET 中有类似ArgumentException
的通用类吗?
在这种情况下检查 null
是否有意义?代码无论如何都会失败,异常的堆栈跟踪将包含上述方法调用。检查 null
似乎是多余和过度的。当然,堆栈跟踪将稍微更清晰(因为它的目标是上述方法,而不是 JRE 的 HashMap
实现中的内部检查)。但这必须抵消额外的 if
语句的成本,此外,永远不会无论如何都不应该发生 - 毕竟,将 null
传递给上述方法不是预期的情况,这是一个相当愚蠢的错误。期待它是彻头彻尾的偏执狂——即使我不检查它,它也会失败并出现同样的异常。
[正如评论中指出的那样,HashMap.put
实际上允许键的 null
值。因此,对 null
的检查在这里不一定是多余的。]
最佳答案
标准的 Java 异常是 IllegalArgumentException
。如果参数为 null,有些会抛出 NullPointerException
,但对我来说,NPE 具有“有人搞砸了”的含义,并且您不希望 API 的客户认为您不知道自己在做什么正在做。
对于公共(public) API,检查参数并尽早干净地失败。时间/成本几乎不重要。
关于java - 防御性编程 : Guidelines in Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1444341/
看完F# Component Design Guidelines ,我没有看到任何评论是否应该声明模块及其类型具有相同的名称。 通常我的项目没有任何循环依赖,所以我不需要创建一个新模块(例如 Infr
我有 .NET 背景,现在正在涉足 Java。 目前,我在设计一个针对错误输入的防御性 API 时遇到了很大的问题。假设我有以下代码(足够接近): public void setTokens(Node
需要有关 Java 接口(interface)命名模式的简短答案。 为什么大多数JAVA接口(interface)名称后缀都有“able”? 例如 java.io.Serializable java.
msvc的cpp核心准则代码分析器告诉我 Warning C26472 Don't use a static_cast for arithmetic conversions. Use brace in
我完全同意下面的导航 假设 Book 详细信息是在 BookDetailActivity 的不同实例中创建的。 book2 详情中压上前的栈是: BookDetailActivity(第 2 本书 -
我已经查看了应用评论的官方应用指南,但可以得到答案。我正在开发一个应用程序,它将获取用户的电话联系人并将它们存储在我的服务器上。然后,这些联系人将对某些其他应用程序用户可见。假设我提醒用户他们的联系人
我得到了这个设置: ... 现在,当 View 未满并且不需要滚动条时 - 一切都按预期工作 - 图像相对于屏幕尺寸为 35
我得到了这个设置: ... 现在,当 View 未满并且不需要滚动条时 - 一切都按预期工作 - 图像相对于屏幕尺寸为 35
如何以编程方式创建 ConstraintLayouts 和 Guidelines?我已经尝试使用以下代码创建一个简单的布局,该布局使用指南将 View 锚定到屏幕中间,但它在屏幕左侧呈现红色“v” V
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
这个问题在这里已经有了答案: How Non-Member Functions Improve Encapsulation (8 个答案) 关闭 5 年前。 C++ Core Guidelines
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。 visit the help center 帮助澄清这个问题以便重新打开它。 11
我想尝试使用 Core Guidelines checker tool在 VS2015 下的 C++11/14 项目上。 在我的代码中,我使用了很多来自 Boost 的库,它们触发了很多警告。我不关心
App Store Review Guidelines 说:“以任何方式或形式下载代码的应用程序将被拒绝。” 我想制作一个使用挑战-响应进行身份验证的应用程序。该应用程序具有一套基本算法,例如 SHA
最近尝试实现 Constraint Layout 但我发现 Barrier 和 Guideline 工作方式相同。 两者都像分隔线一样工作.它们之间有什么区别吗? 最佳答案 何时使用障碍 假设您有两个
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我正在尝试找到一种简单的方法来为 Plottable.js 中的 GuideLineLayer 着色。 到目前为止我尝试了以下方法。 1) 尝试在 onAnchor() 内使用 attr()这会将 a
我正在尝试使用以下方法设置新代理: java -javaagent:agent.jar 当我运行时,我看到 java 使用消息。 list .MF: Manifest-Version: 1.0 Cre
有问题的应用程序将包含用于解锁功能的典型不可更新订阅模型,但也将有另一种机制来访问其他功能。 此应用程序将允许用户购买(假设为消耗品)在固定期限内为另一用户访问完整功能。当然,该应用程序必须在其自己的
我下载了一些数据并将其保存到 Library/PrivateDocuments 目录。我在这个 Library/PrivateDocuments 目录中下载的每个文件都设置了“不备份”属性。苹果仍然说
我是一名优秀的程序员,十分优秀!