Kotlin @JvmOverloads

Daha önce Java ile uğraşmısanız muhtemelen Java’da method overloading kavramını duymuşsunuzdur. Kotlin’de named arguments özelliği sayesinde tek bir method tanımlayarak aynı metodu birden fazla overload etmekten kurtuluyoruz. Alttaki gibi bir methodumuzun olduğunu düşünün.

ve üstteki metodu şöyle çağırabiliriz.

çıktısı da alttaki gibi olacaktır.

Yazdığımız parametrelere verilen default değerler sayesinde bu metodu 4 farklı biçimde method overloading yapmadan çağırabiliriz. Java’da bunun için 4 farklı methodu overloading yaparak ayrı ayrı yazacaktık.

Aynı şekilde constructor kullanırken de property lere default parametre verebiliriz.

Örneğin alttaki gibi çağırımlar yapabiliriz.

Bunu Java’da yapabilmek için 4 farklı constructor yazmamız gerekiyor.

Projenizde hem kotlin hem java kullandığınızı farzedin. Kotlin ile yukarıda yazdığımız method ve class tan oluşturacağımız nesneyi Java’da aynı şekilde çağırmamız mümkün değil. Nasıl yani? Hani bu ikili beraber sorunsuz çalışabiliyordu? Kotlin ile gelen en büyük özelliklerden biri zaten bu değil miydi? (interoperability)

Bu ikilinin yukarıda yazdığımız kodları beraber çalıştırabilmesi için tek yapmamız gereken @JvmOverloads eklemek

Kodlarımızı düzenleyelim

Gördüğünüz gibi method için fun anahtar kelimesinin hemen önüne constructor için ise constructor anahtar kelimesinin önüne @JvmOverloads yazmamız yeterli olacaktır.

Java’da kodun compile edilmiş hali alttaki gibi olacaktır.

Method için;

Data class için;

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.