수색…
소개
목록은 숫자, 단어 또는 실제로 아무것도 저장할 수 있습니다. 이것이 우리가 List를 generic 이라고 부르는 이유입니다.
Generics는 기본적으로 클래스가 보유 할 수있는 유형과 객체가 현재 보유하고있는 유형을 정의하는 데 사용됩니다.
통사론
- 클래스 ClassName < TypeName >
- class ClassName <*>
- ClassName <in UpperBound >
- ClassName <out LowerBound >
- 클래스 이름 < TypeName : UpperBound >
매개 변수
매개 변수 | 세부 |
---|---|
TypeName | 유형 일반 매개 변수의 이름 |
상한 | 공변량 유형 |
하한 | 반 변이 형 |
ClassName | 수업 이름 |
비고
함축 된 상한은 Nullable입니다.
Kotlin Generics에서 유형 매개 변수 T
의 상한은 Any?
. 그러므로이 수업의 경우 :
class Consumer<T>
타입 매개 변수 T
는 실제로 T: Any?
. Null을 허용하지 않는 상한을 만들려면 명시 적으로 특정한 T: Any
. 예 :
class Consumer<T: Any>
신고 사이트 변동
선언 - 사이트 차이 는 사용 사이트 차이를 한 번 및 모든 사용 사이트에 대해 선언하는 것으로 생각할 수 있습니다.
class Consumer<in T> { fun consume(t: T) { ... } }
fun charSequencesConsumer() : Consumer<CharSequence>() = ...
val stringConsumer : Consumer<String> = charSequenceConsumer() // OK since in-projection
val anyConsumer : Consumer<Any> = charSequenceConsumer() // Error, Any cannot be passed
val outConsumer : Consumer<out CharSequence> = ... // Error, T is `in`-parameter
선언 - 사이트 분산의 광범위한 예는 T
가 반환 값 유형으로 만 표시되도록 불변 인 List<out T>
및 인수로 T
를받는 Comparator<in T>
입니다.
사용 사이트 차이
사용 사이트 차이 는 Java 와일드 카드와 유사합니다.
아웃 - 프로젝션 :
val takeList : MutableList<out SomeType> = ... // Java: List<? extends SomeType>
val takenValue : SomeType = takeList[0] // OK, since upper bound is SomeType
takeList.add(takenValue) // Error, lower bound for generic is not specified
투영 중 :
val putList : MutableList<in SomeType> = ... // Java: List<? super SomeType>
val valueToPut : SomeType = ...
putList.add(valueToPut) // OK, since lower bound is SomeType
putList[0] // This expression has type Any, since no upper bound is specified
별 투영법
val starList : MutableList<*> = ... // Java: List<?>
starList[0] // This expression has type Any, since no upper bound is specified
starList.add(someValue) // Error, lower bound for generic is not specified
참조 :
Java에서 Kotlin을 호출 할 때 Variant Generics 상호 운용성.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow