Option

表示一个可空对象,类似J8+的Optional,并且可与Optional相互转换,旨在减少lambda的使用

命名和用法则更像Rust的Option

基本用法

实例化

Option<String> s = Option.some("Hello, world!");
Option<String> n = Option.none();

匹配

for(String str: s) // 若s非空,则执行该块代码,取其值str
{
    System.out.println("some: "+str);
}
if(s.isNone()) // s为空时执行
{
    System.out.println("none");
}

与可空对象转换

@Nullable String str = awa;
Option<String> opt = Option.fromNullable(str);

strnull,则得到Option.none(),否则得到Option.some(str)

String s1 = opt.unwrapOr("default"); // 若opt非空,则得到其值,否则得到"default"
String s2 = opt.toNullable(); // 等价于unwrapOr(null)

与Optional获得

Optional<String> opt = Optional.of("Hello, world!");
Option<String> op = Option.fromOptional(opt);
Optional<String> opt = op.toOptional();

从wrapper转换

有时wrapper包装的对象可空,使用需要isPresent()额外判断

为严谨和简便,将其包装为Option

WrapperObject wrapper = ...;
Option<WrapperObject> opt = Option.fromWrapper(wrapper);

当包装非空时,得到Option.some(wrapper);否则得到Option.none()