2011-08-23 11 views
13

Java'da paket özel arabirimler oluşturmak mümkündür. Onlara javap ile bakarken, "kamu" görünürlüğünden yoksun olduklarını görüyorsunuz.Scala'da paket-özel * özellik * tanımını nasıl tanımlarsınız?

Scala'da, özel bir [paket] veya korumalı [paket] olarak bir özellik bildirebilir, ancak javap'a bakarak, yine de herkese açıktır.

Scala'da paket özel bir özelliği nasıl yaratıyorsunuz?

Scala derleyicisi görünürlüğü dikkate alırken, benim sorunum benim API'mın muhtemelen Java'dan erişileceğidir ve iç uygulamaumu Java'ya göstermek istemiyorum.

cevap

10

Scala kullanarak Java paketi özel değiştiricileri oluşturmak mümkün değildir. Ancak bir Scala projesinde Java ve Scala dosyalarını özgürce karıştırabilirsiniz. Bu yüzden en kolay çözüm bir Java sınıfı/arabirimi oluşturmak ve ardından Scala'da genişletmektir.

+0

John'un cevabı daha "eğitici" olmakla birlikte, muhtemelen tek bir çözüm sağladınız. Çoğu Scala projesi de Java'yı derlemek için yapılandırıldığından, bu makul bir özelliktir. –

13

Bu

http://www.scala-lang.org/node/10488

özel Scala ve Java hem dil özellikleri bir ustaca özel bir duruma sahiptir Sorunuzun cevabı olduğuna inanıyoruz. SLS'nin Değiştiriciler bölümünde özel ve nitelikli özel tartışmasına bakın. Kısacası, özel, Java özeliyle aynı , özel [foo], bayt kodunda özel olarak işaretlenmez, ancak yalnızca bir derleme zamanı erişim denetimi gerektirir.

Gerçekten bytecode derlendikten sonra özel bir özellik paketi özel yapabilirsiniz inanamıyorum.

+0

Bağlantınızda, Martin Odersky'nin kendisi şöyle der: "Kısacası, özel, Java özeliyle aynıdır, oysa özel [foo] bayt kodunda özel olarak işaretlenmez, ancak sadece bir derleme zamanı erişim denetimi gerektirir." Açıkça javaptan gördüğüm delillerle çelişen bir durum var, ama sanırım üyeler, bu durumda kuruculardan, sınıflar/özellikler yerine konuşuyordu. –

+0

@Sebastien - yeterince adil. Tüm arayüzün genel arayüze derlendiğini fark etmedim. Her ne olursa olsun, sizin özelliklerin Java'dan erişilebilir olmasını istiyorsanız, Lex'in çözümünün en iyi olduğunu düşünüyorum. –