2016-03-25 43 views
10

"MyClass" için birkaç uzantı yöntemim olduğunu varsayalım. Sorum şu: Bu yöntemleri düzenlemek/saklamak için en iyi uygulama nedir? Basitçe "MyClassExtensions" Kotlin dosyasına yerleştirilmeli mi?Kotlin uzantısı yöntemleri nasıl düzenlenir

Bu yöntemleri bir sınıf içinde kapsamaya çalıştım, ancak sınıfı içe aktardıktan sonra uzantı yöntemlerinin nasıl kullanılacağını/erişileceğini anlayamadım.

Düzenleme: Açıklama için, uzantı yöntemleri içeren bir dosyayı çağırmak için yardım istemiyordum. Bu yöntemleri saklamak/organize etmek için en iyi uygulamaları/yaklaşımları soruyordum. Yani. sadece kotlin dosyalarına konmalı veya bir sınıfta kapsüllenmiş olmalıdırlar. Java arkaplanından geliyorum, bu yüzden sınıfta eşya depolarım.

+2

https://kotlinlang.org/docs/reference/extensions.html#scope-of-extensions –

+0

Teşekkürler. – pjozsef

+0

'Bu yöntemleri sorgulamak/organize etmek için en iyi uygulamalar/yaklaşımlar bu soruyu çok düşünür – voddan

cevap

3

Önem verdiğim kadarıyla, bunları Java kod tabanında yaptığınız gibi bir yardımcı programa koymalısınız.

Ancak, bunları bir sınıfa koymanıza artık gerek yoktur. En üst düzey işlevler en iyi seçimdir.

Kotlin standart kütüphanesine veya anko gibi bazı açık kaynak projelerine başvurabilirsiniz, bunlar iyi örnekler olabilir. Benim durumumda

, başka pakette orijinal dosyanın aynı ada sahip bir dosya içine bir sınıfın uzantıları koydu ve oluşturulan sınıf dosyaları sayısını azaltmak için

@JvmMultifileClass 

kullanın.

0

Sorunun altındaki yorumda da belirtildiği gibi, Kotlin belgelerinin bu kısmı oldukça iyi açıklıyor. https://kotlinlang.org/docs/reference/extensions.html#scope-of-extensions

+1

Evet, ancak uzantı yöntemlerini içeren KT dosyasını nasıl çağırırsınız? – mfulton26

+0

Fonksiyonları içeren bir C dosyasına ne diyorsunuz? Açıkçası bu, bu dosyada yer alan işlevlere bağlıdır. Aynı Kotlin için de geçerlidir. (Bir sınıf için tanımlanan tüm uzantı işlevlerinin tek bir dosyada bulunması gerektiğini veya içermesi gerektiğini kesinlikle bir kural yoktur.) – yole

+0

Sorduğum soruyu açıklığa kavuşturmak için düzenledim. – pjozsef