inline class (Kotlin 1.5 ile — value class), çalıştırma sırasında ayrı bir nesne oluşturmadan, ilkel türler için sarmalayıcılar oluşturmanıza olanak tanır. Bu, bellek tahsisi üzerine yük olmadan tür güvenliğini artırmak için kullanılır. Altında, bu tür nesneler uygun ilkel tipe derlenebilir.
Örnek:
@JvmInline value class UserId(val id: String) fun printUserId(userId: UserId) { println(userId.id) }
Inline/değer sınıflarının kullanımı, kimlikler, para, ölçü birimleri vb. için tip güvenliği açısından önemlidir.
Değer sınıfının birden fazla özelliği olabilir mi?
Cevap: Hayır. Değer sınıfı, birincil yapıcıda yalnızca bir özellik içerebilir.
Hatalı kod örneği:
@JvmInline value class Money(val amount: Int, val currency: String) // Derleme hatası
Hikaye
Bir döviz bürosunda, miktarı ve para birimini tanımlamak için inline sınıf kullanılmıştır. Değer sınıfına iki alan eklemeye çalıştıklarında derleme hatası aldılar ve kısıtlamayı aşmanın yollarını aramak için biraz zaman harcadılar. Sonunda ayrı bir veri sınıfı yapmaya karar verdiler.
Hikaye
Yerli bir Java kütüphanesi ile entegrasyonda inline sınıf bazen nesneye (boxing) dönüşerek beklenmedik bir şekilde performansı etkiledi. Dokümantasyonu inceleyerek sıradan bir değer nesnesi ile değiştirdiler.
Hikaye
Mikro hizmetlerden oluşan bir projede, değer sınıfı API'deki kimlikler olarak kullanıldı. Bir hizmet doğrudan bir dize döndürürken, diğer bir değer sınıfı döndürdü, bu da Jackson ile seri hale getirme çatışmasına yol açtı. Kimlik ve dize arasında açık bir eşlemeyle düzeltildi.