2023-java-study / book-study

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

[item 65] Class<? extends Set<String>>으로의 형변환 #151

Open NuhGnod opened 1 year ago

NuhGnod commented 1 year ago

p.374 하지만 Class<? extends Set<String>>으로의 형변환은 심지어 명시한 클래스가 Set을 구현하지 않았더라도 성공


? extends Set<> 이 Set을 상속받은 클래스들만 가능하다 라는 의미로 알고 있었는데,어떻게 성공하는 건가? 그리고, 나중에 실제 인스턴스를 생성할 때에 문제가 된다고 하는데 왜 그런지?

NuhGnod commented 1 year ago
    @CallerSensitive
    public static Class<?> forName(String className)
                throws ClassNotFoundException {
        Class<?> caller = Reflection.getCallerClass();
        return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
    }

forName메서드가 Class<?> 를 반환해서 Class< ? > => Class<? extends Set<>> 로의 다운캐스팅(?)은 허용이 되는 것 같은데 어떻게 생각하시나요?

NuhGnod commented 1 year ago

https://docs.oracle.com/javase/tutorial/java/generics/subtyping.html

NuhGnod commented 1 year ago

image