value class
- Kotlin kursu
- Orta seviye
- Ders 76/116
- 5 dk
@JvmInline value class ile sarmalayıcı öğrenirsin.
value class
Bir value class tek bir değeri sarmalar ve tür güvenliğini sıfır ek yükle sağlar. @JvmInline annotation'ı ile birlikte value class olarak tanımlanır. Örnek: @JvmInline value class UserId(val id: String).
Derleme zamanında UserId ayrı bir tür gibi denetlenir; ama çalışma zamanında yalnızca iç String saklanır, sarmalayıcı nesne oluşmaz. Bu kutulama (boxing) olmadan tür güvenliği sağlar. String yerine UserId kullanmak, bir OrderId ile karıştırmayı derleme hatası yapar.
value class kısıtları
Bir value class'ın primary constructor'ı tam olarak bir val parametresi içermelidir. İkinci bir alan eklenemez; birden fazla alan gerekirse data class kullanılır. Parametre val ile işaretlenmelidir.
Örnek: @JvmInline value class UserId(val id: String) geçerlidir. value class UserId(val id: String, val n: Int) geçersizdir çünkü iki alan var. Value class'lar open, abstract veya sealed olamaz; miras kapalıdır. Ama arayüz uygulayabilir ve metot içerebilir.
Uygulama UserId değer sınıfını tanımla
@JvmInline value class UserId(val id: String) tanımla. main içinde val u = UserId("U1") oluştur ve println(u) ile yazdır.
Başlangıç kodu
// UserId değer sınıfını tanımla: value class ile, tek id alanı
fun main() {
// UserId örneği oluştur ve yazdır
}Örnek çözüm
@JvmInline
value class UserId(val id: String)
fun main() {
val u = UserId("U1")
println(u)
}Beklenen çıktı
U1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir value class hangi annotation'ı gerektirir?
- @Value
- @Inline
- @JvmInline Doğru cevap
- @Data
Açıklama: @JvmInline, value class için zorunludur.
2 value class tanımını tamamla
@JvmInline ____ class UserId(val id: String)
@JvmInline value class UserId(val id: String)
Açıklama: value class UserId tek alanlı sarmalayıcıdır.
3 value class parçalarını eşle
| Kavram | Anlamı |
|---|---|
@JvmInline |
Annotation |
value class |
Sarmalayıcı |
val id: String |
Tek alan |
UserId |
Tür |