在Java中返回Optional作为另一种类型(拆箱)[关闭]

问题描述 投票:-3回答:2

有时我必须在方法中返回一些“Object”(不是Optional,以保持向后兼容性),返回值是Optional。

这个例子似乎有效(它编译并没有给出错误),但我对此感到不舒服。有人可以解释为什么这有效并且符合这是正确的吗?

package com.test;

import java.util.Optional;

public class Main {

    public static void main(String[] args) {
        Main main = new Main();
        String result = main.WorkingWithOptional();
        // yes, I know, an Optional here would be better and cleaner.
        if (result != null)
            System.out.println(result);
        else
            System.out.println("RESULT IS NULL");
    }

    public String WorkingWithOptional() {
        Optional<String> res = Optional.of("Test");

        return res.orElse(null);
    }
}
java optional
2个回答
1
投票

如果我们看看java doc Optional#orElse(T other)

如果存在则返回值,否则返回其他值

在你的情况下

 Optional<String> res = Optional.of("Test");

res.get()res.orElse()将永远返回"Test"字符串。您可以将Optional视为您价值的包装。它可能包含值,也可能不包含值。

Optional op = Optional.ofNullable(null); // empty
System.out.println(op.orElse("default value")); // "default value"
op.get();// will produce NoSuchElementException, becase it is empty

2
投票

orElse的工作原理是,如果Optional为空,则返回默认值。如果Optional不为空,则返回其包含的值。

在这种情况下,您使用的默认值是null。它可能是任何String,例如"NOT FOUND"

© www.soinside.com 2019 - 2024. All rights reserved.