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

我想知道这两种代码是否有相同的行为

西门磊
2023-03-14

这两个代码的行为都会在值不存在时引发异常。

Optional<FreePosts> byId = Optional.ofNullable(freePostsRepository.findById(id))
                .orElseThrow(NoSuchElementException::new);
FreePosts byId = freePostsRepository.findById(id)
                .orElseThrow(NoSuchElementException::new);

我想知道这两个代码之间的区别。

共有2个答案

蒙洛华
2023-03-14

要正确编写第一个版本,我需要从findById进行空检查。我的理解正确吗?

洪凯定
2023-03-14

这两个代码的行为都会在值不存在时引发异常。

事实上,事实并非如此。他们不是都那样的。

这两个版本中的一个是不正确的,但它是哪一个取决于findById的声明返回类型。

>

  • 如果返回类型为FreePosts,则第二个版本不编译,因此不正确。

    第一个版本相当于:

     FreePosts byId = freePostsRepository.findById(id);
     if (byId == null) {
         throw new NoSuchElementException();
     }
    

    在我看来,在这种情况下最好写一个明确的抛出,尤其是因为可以包含消息。

    如果返回类型为可选

    在这种情况下,当且仅当findById返回null时,第一个版本才会引发异常。但是如果findById编写正确,它永远不会返回null。(相反,如果应该返回空的可选

    >

    如果findById中存在导致其返回null的bug,抛出NoTouchElementException会掩盖该bug。

    总之,第一个版本是不正确的。

    1-我想存储库API的设计者可能已经指定了可选

  •  类似资料:
    • 问题内容: 和 第二个代码产生了一个空指针异常,该怎么做才能使下一个等效? 问题答案: 我可以看到,如果players某个自定义java.lang.Iterable的get()实现的实现被破坏,或者至少以一种异常的方式(与的行为不同),就会发生这种情况。 除此之外,我唯一能想到的就是您未在代码中向我们展示的某些内容导致了某些错误。 如果执行此操作会怎样?

    • 问题内容: 我有两个数组:一个数组填充了来自ajax请求的信息,另一个数组存储了用户单击的按钮。我使用以下代码(我填写了示例编号): 但是,即使两个数组相同,但名称不同,它总是给出。(我在Chrome的JS控制台中对此进行了检查)。那么,有什么办法可以知道这两个数组是否包含相同的数组?为什么给?我怎么知道第一个数组中的哪个值不在第二个数组中? 问题答案: 请注意,这不会像以前的答案那样修改原始数组

    • 我遇到了一些问题,AppEngine抱怨我的代码有Java1.8方法,而AppEngine需要Java1.7。下面是错误跟踪。我不知道该怎么修理它。

    • 下面是一些C代码: 我得到以下输出: a(3,5) f(9.5) ~A() 一、 因为我希望它能起作用。但我不确定在<code>f</code>返回后是否必须调用<code>A</code>的析构函数。有保证吗?返回的指针在调用,是否会以某种方式变得无效?

    • 我有上述两条路线。第一个是使用句柄(用户名)从dB中搜索用户,第二个是使用dB本身创建的用户id进行搜索。当我使用错误的句柄请求第一条路由时,会执行then()块,并得到以下响应: 但在第二条路径(按用户id搜索)中,当我输入错误的用户id时,将执行catch块,并得到以下响应: 这两条路线的逻辑相同,但它们的响应不同。这背后的原因是什么??? 如果你想看看Profile模式,这里是: 我在使用错

    • 我拿不到输出。。有人能帮我得到输出吗 下面给出了程序运行的示例(注意:下面的粗体文本是用户输入的输入): 输入三角形的三条边