SomeGeneric<*>
과 의 차이점을 완전히 이해하지 못했습니다 SomeGeneric<Any>
. 나는 *
무엇이든 (와일드 카드)를 Any
나타내며 모든 개체가 상속 하는 개체를 나타냅니다 . 그래서 그들은 동일해야하는 것 같지만, 그렇습니까?
답변
별 투영 을 어떤 유형이 아니라 정확히 무엇인지 모르는 고정 유형을 나타내는 방법으로 생각하면 도움이 될 수 있습니다 .
예를 들어, 유형 MutableList<*>
은 무언가 의 목록을 나타냅니다 (정확하게 무엇인지 알 수 없음). 따라서이 목록에 무언가를 추가하려고하면 성공하지 못할 것입니다. 의 목록, String
의 목록 Int
또는 다른 항목의 목록 일 수 있습니다. 컴파일러는 목록이이 유형의 개체를 허용하는지 확인할 수 없기 때문에이 목록에 어떤 개체도 넣는 것을 허용하지 않습니다. 그러나 이러한 목록에서 요소를 가져 오려고하면 Any?
Kotlin의 모든 개체가 Any
.
에서 ASCO의 아래 코멘트 :
또한
List<*>
모든 유형의 객체를 포함 할 수 있지만 해당 유형 만 포함 할 수 있으므로 문자열 (단, 문자열 만)List<Any>
을 포함 할 수있는 반면, 문자열과 정수 등을 모두 동일한 목록에 포함 할 수 있습니다.
답변
난 당신이 의미하는 생각 맥락에서 SomeGeneric<*>
동일합니다 SomeGeneric<out Any?>
. Java에 해당하는 것은 SomeGeneric<? extends Object>
.
“star-projections”라는 구문. 공식 문서는 다음과 같습니다 : https://kotlinlang.org/docs/reference/generics.html#star-projections