Study with me/TECH!T back-end shcool 7
week_04 Optional +@
by 외계나무
2023. 11. 8.
Optional +@
import java.util.Optional;
public class Main {
public static void main(String[] args) {
// Not Optional
System.out.println("== Not Optional ==");
Person person1 = new Person();
boolean isHandNull = true;
if (person1 != null) {
if (person1.getLeftArm() != null) {
if (person1.getLeftArm().getHand() != null) {
isHandNull = false;
person1.getLeftArm().getHand().grab();
}
}
}
if (isHandNull) {
System.out.println("hand is null");
}
// Optional, v1
System.out.println("== Optional, v1 ==");
Optional<Person> person2 = Optional.ofNullable(new Person());
person2
.map(p -> p.getLeftArm()) // person2 안에 있는 Person 객체를 꺼내서 getLeftArm()을 실행, 없으면 실행안됨
.map(arm -> arm.getHand()) // arm 객체를 꺼내서 getHand()을 실행, 없으면 실행안됨
.ifPresentOrElse(
hand -> hand.grab(),
() -> System.out.println("hand is null")
);
// Optional, v1
System.out.println("== Optional, v2 ==");
Optional<Person> person3 = Optional.ofNullable(new Person());
person3
.map(Person::getLeftArm) // person2 안에 있는 Person 객체를 꺼내서 getLeftArm()을 실행, 없으면 실행안됨
.map(Arm::getHand) // arm 객체를 꺼내서 getHand()을 실행, 없으면 실행안됨
.ifPresentOrElse(
Hand::grab,
() -> System.out.println("hand is null")
);
}
}
class Person {
private Arm leftArm;
private Arm rightArm;
public Person() {
this.leftArm = new Arm();
this.rightArm = new Arm();
}
public Arm getLeftArm() {
return leftArm;
}
public Arm getRightArm() {
return rightArm;
}
}
class Arm {
private Shoulder shoulder;
private Hand hand;
public Arm() {
this.shoulder = new Shoulder();
this.hand = new Hand();
}
public Shoulder getShoulder() {
return shoulder;
}
public Hand getHand() {
return hand;
}
}
class Shoulder {
}
class Hand {
public void grab() {
System.out.println("Grabbing");
}
}
// -> arm, shoulder, hand 뭐 하나라도 없으면 'hand is null' 출력, 다 있으면 grab 실행.