Given the code fragments:
class Employee {
Optional<Address> address;
Employee(Optional<Address> address) {
this.address = address;
}
public Optional<Address> getAddress() {
return address;
}
}
class Address {
String city = "New York";
public String getCity() {
return city;
}
public String toString() {
return city;
}
}
and
Address address = null;
Optional<Address> addrs1 = Optional.ofNullable(address);
Employee e1 = new Employee(addrs1);
String eAddress = (addrs1.isPresent()) ? addrs1.get().getCity() : "City Not available";
System.out.println(eAddress);
What is the result?
A.
New York
B.
City Not available
C.
null
D. A NoSuchElementException is thrown at run time.
題解
Optional類別的ofNullable方法允許傳入參考為null的物件參數,來產生Optional物件。由於第41行的address變數為null,因此會產生出空的Optional物件。
程式第42行,利用空的Optional物件來實體化新的Employee物件,這個沒有問題。
程式第43行,先判斷Optional物件的內容是否存在,由於這裡使用的Optional物件是空的,因此會將「City Not available」字串參考指派給eAddress變數儲存。
最後輸出「City Not available」。
若在程式有執行到「addrs1.get()」,將會因為addrs1所參考到的Optional物件的內容是空的,而拋出NoSuchElementException例外。但在這個題目中,使用了三元條件運算子來控制程式的流程,所以不會執行到「addrs1.get()」。