问题标签 [defensive-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
618 浏览

java - 是否可以阻止 try catch 返回 null

如果有人调用我的方法,我想防御性地处理问题。通常我只是返回null

我决定实施 atry catch但看起来我最终还是会返回null

我可以这样写 mytry catch在方法结束时它不会返回null吗?

示例代码,peek用于 Stack 类。

使用空堆栈调用时。它会返回null

那么我什至应该try catch为这种情况而烦恼吗?我很想这样做:

如果堆栈不为空,我想返回元素。如果堆栈空,那么如果我使用try-catch?

0 投票
2 回答
1416 浏览

c++ - 如何在 Qt5 中检测 QObject::moveToThread() 失败?

Qt5.3的QObject::moveToThread()文档解释说,moveToThread()如果对象有父对象,该方法可能会失败。如何在我的代码中检测到此故障?

我意识到简单地确保我的对象首先没有父对象可能就足够了,但作为一种防御性编程实践,我想测试所有可能失败的调用的返回值。

编辑:我想在这里强调一些答案,我完全知道我可以在调用 moveToThread 之前测试 parent 是否为 0。我正在寻找可能的方法来凭经验确定moveToThread呼叫实际上成功了。

0 投票
3 回答
89 浏览

java - 如何在不违反 DRY 原则的情况下从接口检查方法中的参数

我有以下代码:

我打破了 DRY 原则,因为我在每个实现中都重复了检查,并且文档也重复了它。在这种情况下检查论点的最佳方法是什么?

0 投票
0 回答
105 浏览

android - 调用当前 API 中可能不可用的 Android 方法

我正在为盲人用户创建一个 Android 应用程序。一个可用性问题是他们的手指倾向于触摸导航栏中的后退按钮,他们突然发现自己离开了应用程序。

在 Android 4.4 KitKat 及更高版本中,我可以使用...

...隐藏导航栏。(在早期版本中,我可以建议用户在手机周围放一条粗松紧带来隐藏导航栏。)

我想将上述调用包含在与 API 2.2 Froyo 兼容的应用程序中,而不会引发错误,因此在更新的手机上不需要使用松紧带。

我已经看过这个问题,但我不太确定如何将建议的答案应用于MainActivity 准系统 Hello World 项目中的方法。


编辑
这是我修改后的代码,现在对我有用:

0 投票
3 回答
45 浏览

java - 业务方法中的错误检查,也就是防御性编程

我开始向大型 Java 代码库添加测试。我经常在我正在测试的会话 bean 中看到以下内容:

编写单元测试来破坏此代码(发送空或不存在的 id)很容易。当我这样做时,团队的一半开发人员说:

我们不会对所有内容进行错误检查。如果你的参数是垃圾,你会很快知道的!

另一半说:

我们必须将 ifs 添加到 id,然后添加到 o,如果其中任何一个为 null,则返回 null。

单元测试的目的不是准确地找到这些问题吗?(是的,我在征求意见!)

是的,从 Long 切换到 long 将删除一个 if。

0 投票
3 回答
107 浏览

java - 这个类可以变得更加不可变吗?

是否可以做更多的事情来使这个类不可变?字符串已经是不可变的,返回的集合是不可修改的。tutees 和 name 变量是私有的和最终的。还能做什么?如果使用 Tutor 类的唯一类在包中,我可以将构造函数、getTutees 方法和 getName 方法更改为包私有吗?

编辑:

这是 Student 类,问题要求我描述必要的更改以使 Student 不可变。我已经注释掉了两个 setter 方法,所以我可以使变量成为最终的。这是使它真正不可变的唯一方法吗?

0 投票
2 回答
686 浏览

oop - 检查公共方法中参数的先决条件

我要问你对设计问题的看法。

问题基本上如下:对象的公共方法应始终检查其输入参数中的先决条件,还是更好地对调用者负责并“信任流程”?

我不是在谈论明显的前提条件,例如检查 null 以避免 null 引用异常,而是指方法参数中的业务前提条件。这通常发生在 DDD 服务中,它对输入参数执行某种验证并返回一个包含有关该验证的反馈的对象。

例如,考虑一个CheckPerson具有公共方法的类,该方法PerformCheck带有一个 type 参数Person。想象一下,有一条商业规则说这张支票对金发碧眼的人没有意义。

在我看来,这个检查很重要,方法名称应该反映这个规则(类似于PerformCheckForNonBlondePerson)。

我应该添加这些检查,还是应该信任调用者?

0 投票
3 回答
503 浏览

c# - 如何防止“对象不能从 DBNull 转换为其他类型”?

我有这段代码,我在 ISTM 中防御性地编码以防止分配空值:

...但我得到,“对象不能从 DBNull 转换为其他类型”在最后一次尝试分配的特定迭代中(到 pauv.Week2Usage)。

该字段确实出现在类中:

...并且代码对于大多数记录都运行良好。

什么会导致此异常,我该如何防范?

0 投票
0 回答
411 浏览

if-statement - 防御性编程,if-then-else 应该是 switch-case 吗?

当我想到这是一个糟糕的编程时,我正在编写一个 if-then-else:

然而,当我编写这个函数时,我突然想到我应该写这个

这样,如果有人添加了不同的状态,例如:“reviewing”并且程序员没有“更新”这个方法,那么就会运行不正确的编程。

我怀疑在所有有一组显式值的情况下,除了 TRUE 或 FALSE,所有 if-then-[elseif]-else 比较都应该通过 case [switch] 完成,并且必须带有一个抛出异常的 else .

这是防御性编程吗?还是偏执狂?

0 投票
1 回答
184 浏览

java - 如何检查 NoClassDefFoundError?

我的 Android 移动应用程序中很少有 NoClassDefFoundError 仅来自三星和 QMobile 的特定设备。

添加以下代码会检测到错误吗?

主动检测 NoClassDefFoundError 而不会导致应用程序崩溃的最佳方法是什么?

编辑:

文档说该方法引发了以下异常,并且没有提到任何关于NoClassDefFoundError.

我可以改写这个问题

Class.forName(String)抛出NoClassDefFoundError或如何检查一个类是否有“Def”?