10

Bir modelleme aracı tarafından oluşturulan Java sınıflarına örtük dönüşümler eklemek istiyorum. Bu yüzden onları bu sınıfların tamamlayıcı nesnesine eklemek istiyorum, böylece derleyici bunları otomatik olarak bulur. Ancak onları ayrı bir dosyaya ekleyemiyorum çünkü eşinin aynı dosyada tanımlanması gerekiyor. Bu konuda yapabileceğim bir şey var mı?Scala'da, Java'da tanımlanan bir sınıf için bir tamamlayıcı nesneyi nasıl tanımlayabilirim?

Elbette, örtülü tüm dönüşümlerimi başka bir nesnede tanımlayabilir ve sonra bunu kapsam içine getirebilirim, ancak bu, fazladan bir içe aktarma gerektirir. Başka bir çözüm var mı?

+2

Paket nesnede örtülü dönüşümler tanımlayarak fazladan içe aktarmadan kaçabilirsiniz. – axel22

+0

Java sınıflarının bir tamamlayıcı nesnesi yok. Hile yapmaya çalıştığınız ve bir Java sınıfının bir arkadaşı nesnesi gibi görünmesini mi istediniz? –

+0

@Rex Kerr: Evet, hile olarak kabul edildiğini bilmiyordum. @ axel22: İyi fikir, bence bununla devam edeceğim! –

cevap

9

bu haliyle artık hiçbir şekilde

import my.domain._ 
val tu : TimeUnit = TimeUnit.valueOf("MILLISECONDS") 

Ama senin domain.TimeUnit bir modüldür: Sonra

object domain { 

    type TimeUnit = java.util.concurrent.TimeUnit 
    object TimeUnit { 
    def valueOf(s : String) = java.util.concurrent.TimeUnit.valueOf(str) 
    val Millis = java.util.concurrent.TimeUnit.MILLISECONDS 
    //etc 
    } 

bu kullanılabilir Eşleme nesnelerini aynı dosyaya koymadan tanımlamak. Yapabileceğiniz en iyi şey, aynı paket ve adla ve ekstra bir içeriğe sahip eşlik etmeyen bir nesnedir.

bunu açıkça çok faydalı bir özellik olacaktır çünkü kapsülleme hakkında varsayımlar http://groups.google.com/group/scala-debate üzerine yazı lütfen gel bozmadan post-hoc arkadaşlık oluşturmak için iyi bir yol düşünebiliriz edin.

9

Genellikle kendi projem özel Predef benzeri düzenlemede yaptığım kendi yoldaş nesnesini tanımlayabilirsiniz. Örneğin: (yani scala object) Scala derleyici ile

+0

Bu "bağımsız bir nesne", eşlik eden bir nesne değil, değil mi? (son sonuç burada aynıdır) – VonC

+3

, en azından, örtük dönüşümler için çalışmayacaktır (bu, tamamlayıcı nesnelerin tatlı bir noktasıdır) –

+0

Bu doğrudur - ama yine de kendi başına bir nesnedir ve –

İlgili konular