【发布时间】:2019-02-08 09:33:20
【问题描述】:
我正在尝试使用 Optional 来检查 nullpointexception 并以防它发生然后打印一些其他内容。 (https://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html)
我将声卡设置为 null,但我仍然收到 nullpointerexception,但我想通过可选来避免它。
主类(计算机)
import java.util.Optional;
public class Computer {
public Optional<SoundCard> getSoundcard() {
return soundcard;
}
public void setSoundcard(Optional<SoundCard> soundcard) {
this.soundcard = soundcard;
}
private Optional<SoundCard> soundcard = null ;
public static void main(String[] args)
{
Optional<Computer> computer = Optional.of(new Computer());;
String verion = computer.flatMap(Computer::getSoundcard)
.flatMap(SoundCard::getUsb)
.map(USB::getVersion)
.orElse("Unknown");
System.out.println(verion);
}
}
另一类声卡
import java.util.Optional;
public class SoundCard {
public Optional<USB> getUsb() {
return usb;
}
public void setUsb(Optional<USB> usb) {
this.usb = usb;
}
private Optional<USB> usb = null;
}
另一个类 (USB)
public class USB {
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
private String version;
}
欢迎任何提示或帮助:)
【问题讨论】:
-
只需初始化变量
Optional<Computer> computer ; -
那是因为它没有被初始化。 => 可选 计算机;计算机computer1 =新计算机(); String verion = computer.Stream().flatMap(Computer::getSoundcard) 另外,它是stream(),不是Stream()
-
变量计算机未初始化。这意味着您必须创建计算机选项或创建空选项。例如 Optional
computer = Optional.of(new Computer()) 或 Optional computer = Optional.empty()。我不确定Optionals是否有方法stream(),但如果是真的,它必须以小写开头。