2023-java-study / book-study

북 스터디 기록 레포지토리
0 stars 0 forks source link

[Item 31] 런타임 오류를 낼 가능성이 있는 형변환 #98

Open gmelon opened 1 year ago

gmelon commented 1 year ago

p.189 - 런타임 오류를 낼 가능성이 있는 형변환 부분에서, 예를 들어 List으로 List<?>을 형변환한다면, 런타임 오류가 날 수 없지 않나요? 런타임 오류를 굳이 내려면 아래와 같은 상황을 생각해볼 수 있을 것 같은데

Integer i = method(List.of("String"));

---

public static <E, F> E method(List<? extends F> list) {
    List<E> l = (List<E>) list;
    return l.get(0);
}

위 경우 하나의 타입 파라미터만 사용되는게 아니기 때문에 책에서 말하는 (와일드카드로 대체해 사용하라는) 권장 사례가 아니기도 하구요.

해당 메서드만 사용하는 경우가 아니고 제네릭 클래스 안에서 사용되거나 혹은 다른 복잡한 상황에서 런타임 오류가 발생하는 것을 이야기하는 걸까요? 런타임 오류가 발생할 수 있는 상황이 궁금하네요.

ssstopeun commented 1 year ago
static void swapWild(List<?> list, int i, int j){
    List<String> result = (List<String>) list;
    result.set(i,result.set(j,result.get(i)));
};

혹시...이런식으로 받을 List의 타입으로 형변환하여 바꾸는 경우를 말하는 걸까요...? 이렇게 하면 컴파일 때는 오류가 안나도 List이면 런타임때 오류를 내니까...

근데 이럴거면 static void swqpWhild(List<String> list, int i, int j) 이렇게 하면 되는데..........😭