Apa arti satu tanda seru di Kotlin? Saya telah melihatnya beberapa kali terutama saat menggunakan Java API. Tetapi saya tidak dapat menemukannya di dokumentasi maupun di StackOverflow.
Mereka disebut tipe platform dan itu berarti Kotlin tidak tahu apakah nilai itu bisa atau tidak null
dan terserah Anda untuk memutuskan apakah itu nullable atau tidak.
Singkatnya, masalahnya adalah bahwa referensi apa pun yang datang dari Java mungkin null, dan Kotlin, karena desainnya aman-null, memaksa pengguna untuk memeriksa setiap nilai Java secara null, atau menggunakan panggilan aman (
?.
) atau pernyataan bukan-null (!!
). Itu adalah fitur yang sangat berguna di dunia Kotlin murni, cenderung berubah menjadi bencana ketika Anda harus menggunakannya terlalu sering di pengaturan Kotlin / Java.Inilah sebabnya kami mengambil pendekatan radikal dan membuat sistem tipe Kotlin lebih santai dalam hal interop Java: sekarang referensi yang berasal dari Java memiliki tipe yang ditandai secara khusus - Blog Kotlin
platform types
Ini adalah notasi untuk jenis platform :
T!
berarti "T
atauT?
"sumber
T
berarti "T!
atauT?
"T
dibuat "tidak dapat dibatalkan", dan sisanya lebih atau kurang sewenangJenis Platform
Nama jenis atau nama kelas yang diakhiri dengan tanda seru tunggal
!
disebut jenis platform di Kotlin. Anda menemukannya saat Anda bekerja di Kotlin dengan kode Java lama yang tidak berisi informasi nullability.Contoh:
Informasi Nullable: Jenis Nullable
@Nullable String
di Jawa dianggap sebagaiString?
Kotlin.Informasi Non-null: Jenis Non-null
@NotNull String
di Jawa dianggap sebagaiString
Kotlin.Tidak Ada Informasi: Jenis Platform
String
tanpa anotasi di Jawa dianggap sebagaiString!
Kotlin.Bagaimana cara menangani Jenis Platform?
Anda dapat bekerja dengan jenis platform baik sebagai nullable atau non-null. Kompiler akan memungkinkan Anda memanggil semua metode pada tipe ini. Tanggung jawab Anda adalah bagaimana menggunakannya. Jika Anda tahu bahwa nilainya bisa nol, Anda harus membandingkannya dengan null sebelum Anda memanggil metode padanya. Jika Anda tahu itu bukan null, Anda dapat menggunakannya secara langsung tetapi seperti di Java, Anda akan mendapatkan pengecualian jika asumsi Anda tentang nullability salah.
Perhatikan bahwa Anda tidak dapat mendeklarasikan jenis platform dalam kode Kotlin, karena hanya berasal dari kode Java.
Jenis Warisan dan Platform
Saat mengganti metode Java dalam kode Kotlin, Anda memiliki opsi untuk mendeklarasikan parameter dan mengembalikan tipe sebagai nullable atau non-null. Anda harus memilih ini dengan bijak, karena jika Anda memutuskan untuk membuat parameter menjadi non-null, compiler Kotlin menghasilkan pernyataan non-null untuk parameter bukan null ini. Dan ketika lain kali Anda mengakses kode Kotlin ini kembali dari Java dan Anda meneruskan nilai null, Anda akan mendapatkan pengecualian.
Harapan yang membantu menghilangkan semua keraguan Anda tentang Jenis Platform.
sumber
Tipe yang dinotasikan
!
disebut tipe platform , yang merupakan tipe yang berasal dari Java dan kemungkinan besar bisanull
. Itulah yang disimpulkan oleh kompilator Kotlin secara default saat memanggil Java (untuk kasus paling dasar, metode Java dapat diberi anotasi untuk menyiasatinya). Anda harus menangani tipe platform sebagai tipe nullable , kecuali Anda tahu pasti bahwa API tertentu tidak akan pernah kembalinull
. Kompilator memungkinkan tipe platform untuk ditugaskan ke variabel dari tipe nullable dan non-null.Anda bisa menyebut jenis platform sebagai "jenis nullability yang tidak diketahui ". Yang juga penting untuk diketahui adalah Anda tidak dapat menggunakan tipe bertanda seru untuk tipe Anda sendiri, ini bukan bagian dari sintaks Kotlin, ini hanya notasi .
sumber
Seperti yang disebutkan oleh s1m0nw1,
T!
artinyaT or T?
. Pertanyaan selanjutnya adalah: apa ituT?
? Ini didokumentasikan dengan baik di https://kotlinlang.org/docs/reference/null-safety.html . Kotlin tidak mengizinkan elemen tertentunull
, misalnyaString
, tidak seperti Javasumber
Kutipan dari Jenis Platform di Kotlin :
Sebagai contoh:
Hanya berarti sebagai berikut: " Kumpulan Java dari T mungkin bisa berubah atau tidak, bisa jadi null atau tidak ".
Semoga ini membantu.
sumber