Generics memungkinkan satu definisi class/function dipakai untuk banyak tipe tanpa kehilangan type safety. Kotlin menambahkan deklarasi variance yang lebih jelas dibanding Java.

# Generic Classes

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 Functions

Pelajari cara mendeklarasikan function generic dengan type parameter sebelum nama function, serta kapan pemanggil boleh menentukan atau mengandalkan type inference.

Buka →
# Generic Interfaces

Pelajari cara mendeklarasikan interface generic dan mengimplementasikannya dengan tipe konkret untuk membangun kontrak yang reusable dan type-safe.

Buka →
# Type Parameters

Pelajari konvensi penamaan type parameter (T, E, K, V, R) serta cara membatasinya dengan upper bound tunggal maupun recursive bound.

Buka →
# Upper Bounds

Pelajari 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 →
# Variance

Pahami mengapa List<String> bukan subtype List<Any> dan bagaimana Kotlin memperlakukan tipe generic secara invariant secara default untuk menjaga type safety.

Buka →
# Covariance

Pelajari keyword out untuk membuat class generic covariant sehingga Producer<Sub> menjadi subtype Producer<Super> dengan aman.

Buka →
# Contravariance

Pelajari keyword in untuk membuat class generic contravariant sehingga Consumer<Super> menjadi subtype Consumer<Sub> dengan aman.

Buka →
# Declaration-Site Variance

Pelajari cara menentukan variance pada deklarasi class dengan out dan in sehingga pemakai tidak perlu mengulang variance setiap kali memakai class tersebut.

Buka →
# Use-Site Variance

Pelajari cara menentukan variance pada saat pemakaian tipe dengan out dan in projections ketika class tidak dapat dideklarasikan covariant atau contravariant secara keseluruhan.

Buka →
# Star Projections

Pelajari cara memakai star projection List<*> untuk bekerja dengan tipe generic tanpa peduli terhadap type argument, mirip dengan Java List<?>.

Buka →
# Type Erasure

Pahami 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 Parameters

Pelajari inline fun dengan reified type parameter untuk mengakses tipe generic saat runtime, melakukan pemeriksaan is T, dan filter berbasis tipe.

Buka →
# Designing Generic APIs

Pelajari pedoman kapan memakai generics vs interface, menghindari over-generic, menerapkan PECS, dan memakai type aliases untuk menyederhanakan signature.

Buka →