当前位置: 首页 > 知识库问答 >
问题:

为null检查断言

谈旺
2023-03-14
if(x != null) {
    x.setId(idx);
    if (y != null) {
        if (y.id == x.id) {
            x.doSth();
        }
    } else {
        //handle error
    }
} else {
    //handle error
}
try {
    assert(x != null); 
    x.setId(idx);
    assert(y != null);
    if (y.id == x.id) {
        x.doSth();
    }
} catch (AssertionError e) {
    //handle error
}
public class AssertTest {

    static final int LOOPS = 10000000;

    public static void main(String[] args) {

            String testStr = "";

            long startNotEqualsTest = System.currentTimeMillis();
            for (int i = 0; i < LOOPS; i++) {
                if (testStr != null) {
                    testStr = System.currentTimeMillis() + "";
                } else {
                    throw new RuntimeException("We're doomed");
                }
            }
            long notEqualsTestDuration = System.currentTimeMillis() - startNotEqualsTest;

            testStr = "";

            long startAssertTest = System.currentTimeMillis();      
            for (int i = 0; i < LOOPS; i++) {
                try {
                    assert(testStr != null);
                    testStr = System.currentTimeMillis() + "";
                } catch (AssertionError e) {
                    throw new RuntimeException("We're doomed");
                }
            }
            long assertTestDuration = System.currentTimeMillis() - startAssertTest;

            System.out.println("Duration with if : " + notEqualsTestDuration + "ms");
            System.out.println("Duration with assert : " + assertTestDuration + "ms");  
    }
}
Duration with if : 1234ms
Duration with assert : 1313ms
Duration with if : 1391ms
Duration with assert : 1375ms

共有1个答案

云长恨
2023-03-14

问问自己,您将如何处理null情况?如果对象为null而不应该为null,您该怎么办。在大多数情况下,完全可以不处理它。只需在执行过程中稍后生成NullPointerException。无论如何,这很可能是一个编程错误,因此被exceptionhandler捕获并最终将其写入日志是可以的。

当然,也有需要对null对象做出反应的情况。if-else是针对这种情况制定的。它很容易,可以自我解释,每个程序员都知道这个构造,所以为什么不使用它呢。无论如何,不鼓励在生产中使用assert。例如,在SO上看到这篇文章。而且,根据我的口味,try/catch块相当麻烦。

还有其他的选择。例如,DavidW建议使用注释,这是完全好的,只要您确保这些注释被解释(例如,在迁移代码时可能是一个问题)。

Validate.notNull(myObj) 
Validate.hasEmailCorrectSyntax("foo@bar.com");
 类似资料:
  • 这是Kotlin的bug,还是和Android Studio有关?

  • 我正试图在android中创建一个干净的复选框代码,但如果我只是按下按钮而没有选中复选框,则会出错这是清理复选框的代码: 这是我在重置按钮上输入的代码 该复选框是一个声明: 显然,如果未选中复选框并出现错误,tem.getItemId为null。 注:如果你不知道答案或不明白,最好询问或继续,然后投否决票。让其他有帮助的人看到这个问题

  • 问题内容: 这是下面的代码: 如果值是我仍然得到未选中的框。我是不是应该从上面做错事,应该工作? 有任何想法吗? 问题答案: 使用is_null或运算符。

  • 问题内容: 我需要检查value是否定义为任何东西,包括null。将null值视为undefined并返回。以以下为例: 请注意,这是未定义的。 我需要找到满足以下条件的条件: 有任何想法吗? 问题答案: IIRC,您可以使用此功能:

  • 问题内容: 我有一个名为的对象。 它具有几个属性; 我将一个人对象设置为。 1.)我需要检查对象是否不为null;以下表达式正确吗? 2.)我需要知道ID是否包含一个Int。 但是,java不允许这样做。我该如何检查? 问题答案: An 不为null,如果未初始化,则可能为null 。 如果您希望整数可以为null,则需要使用代替。 此外该语句不能为真,因为如果为null,则将抛出a。所以正确的表

  • 我是Java初学者,目前正在完成有关DSA的Udemy课程。我正在学习链表,并且正在研究在链表中插入和删除节点的方法。 从我所学到的到目前为止,我知道我们使用条件来检查链接列表是否是空的。 如果条件为true,则LinkedList为空,否则它不为空。 然而,我们不应该检查是否,因为尾巴将始终引用LinkedList中的最后一个节点,即使我们使? 这是我的密码: