Open NuhGnod opened 1 year ago
이제보니 IllegalArgumentException은 비검사예외였네요. 그래도
private static void check(int n) throws IOException {
throw new IOException();
}
numbers.stream().map(
qw -> {
try {
check(qw);
} catch (RuntimeException e) {
System.out.println("??");
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
return qw;
}
).toArray();
처럼 검사예외를 던지는 메서드로 수정하여도 실행이 되더라구여 책에서는 무슨 상황을 말한걸까요?
흠 그러게요 저렇게 try-catch를 람다 안에 넣지 않고 사용하는걸 '직접 사용' 한다고 표현한거려나요?
예시로 들어주신거는 스트림안에서 검사예외를 던지는 경우를 나타내는 메서드를 작성해주셨는데 저는 검사예외를 던지는 그러니까 try-catch가 있는 메서드가 따로 있고 스트림안에서 이 메서드를 직접사용했는 경우를 생각했습니다.
package Item71;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
Person p1 = new Person(1);
p1.setName("jieun");
p1.setJob("developer");
Person p2 = new Person(2);
p1.setName("Stop");
List<Person> people = Arrays.asList(p1,p2);
people.stream()
.map(Person::haveJob1)
.forEach(System.out::println);
people.stream()
.map(Person::haveJob) //컴파일 에러
.forEach(System.out::println);
}
static class Person{
private final int id;
private String name;
private String job;
public Person(int id){
this.id=id;
}
public void setName(String name){
this.name=name;
}
public String setJob(String job){
this.job=job;
}
public String haveJob1(){
if(job==null){
job = "default job";
}
return String.valueOf(id)+" "+name+" "+job;
}
public String haveJob() throws Exception {
if(job==null){
throw new Exception("직업을 입력하지 않았습니다.");
}
return String.valueOf(id)+" "+name+" "+job;
}
}
}
이런 상황을 생각해봤습니다.
P.393
검사 예외를 던지는 메서드는 스트림 안에서 직접 사용할 수 없기 때문에(아이템 45~48) ~
제가 잘못이해하고 있는건가 싶네요. 검사예외를 던지는 메서드는 스트림에서 사용못한다는데, 예시를 들어봤습니다.저는
검사 예외
를 try-catch 같이 직접 예외를 체크해주는 상황?이라고 이해했습니다. 그래서 위와같이 작성했는데 잘 동작합니다.그래서 질문이 2가지가 나오네요.