Generics memungkinkan satu definisi class/function dipakai untuk banyak tipe tanpa kehilangan type safety. Kotlin menambahkan deklarasi variance yang lebih jelas dibanding Java.
Pelajari cara mendefinisikan class generic dengan satu atau beberapa type parameter agar satu definisi class dapat dipakai untuk berbagai tipe data dengan aman.
Buka → # Generic FunctionsPelajari cara mendeklarasikan function generic dengan type parameter sebelum nama function, serta kapan pemanggil boleh menentukan atau mengandalkan type inference.
Buka → # Generic InterfacesPelajari cara mendeklarasikan interface generic dan mengimplementasikannya dengan tipe konkret untuk membangun kontrak yang reusable dan type-safe.
Buka → # Type ParametersPelajari konvensi penamaan type parameter (T, E, K, V, R) serta cara membatasinya dengan upper bound tunggal maupun recursive bound.
Buka → # Upper BoundsPelajari cara membatasi type parameter dengan upper bound tunggal maupun jamak menggunakan klausa where, agar method pada bound dapat dipakai di dalam class atau function generic.
Buka → # VariancePahami mengapa List<String> bukan subtype List<Any> dan bagaimana Kotlin memperlakukan tipe generic secara invariant secara default untuk menjaga type safety.
Buka → # CovariancePelajari keyword out untuk membuat class generic covariant sehingga Producer<Sub> menjadi subtype Producer<Super> dengan aman.
Buka → # ContravariancePelajari keyword in untuk membuat class generic contravariant sehingga Consumer<Super> menjadi subtype Consumer<Sub> dengan aman.
Buka → # Declaration-Site VariancePelajari cara menentukan variance pada deklarasi class dengan out dan in sehingga pemakai tidak perlu mengulang variance setiap kali memakai class tersebut.
Buka → # Use-Site VariancePelajari cara menentukan variance pada saat pemakaian tipe dengan out dan in projections ketika class tidak dapat dideklarasikan covariant atau contravariant secara keseluruhan.
Buka → # Star ProjectionsPelajari cara memakai star projection List<*> untuk bekerja dengan tipe generic tanpa peduli terhadap type argument, mirip dengan Java List<?>.
Buka → # Type ErasurePahami bagaimana informasi tipe generic dihapus saat runtime sehingga List<String> dan List<Int> sama-sama menjadi List, dan konsekuensinya bagi pemeriksaan tipe runtime.
Buka → # reified Type ParametersPelajari inline fun dengan reified type parameter untuk mengakses tipe generic saat runtime, melakukan pemeriksaan is T, dan filter berbasis tipe.
Buka → # Designing Generic APIsPelajari pedoman kapan memakai generics vs interface, menghindari over-generic, menerapkan PECS, dan memakai type aliases untuk menyederhanakan signature.
Buka →