2012-12-04 16 views
8

Mam klasy z tym kodem:Jakie są gwarancje dla kwalifikatorów dostępu scala?

package shop.orders.services.email 

private[services] class EmailService {...} 

Następnie w innym opakowaniu, używam tej klasy:

package shop.ui 

import shop.orders.services.email.EmailService 

class PaymentConfirmation extends WithFacesContext { 

    var emailService: EmailService = null 

Patrząc na wygenerowanego kodu bajtowego, nie ma śladu modyfikatora dostępu, co ma sens, ponieważ Java nie obsługuje takich ograniczeń dostępu. Co się stanie, jeśli utworzę bibliotekę zawierającą kod taki jak blokowy i spróbuję skompilować blok drugi z biblioteką - nie ma szans, że kompilator się nie powiedzie, ponieważ informacja zostanie utracona. Czy jest zawarty w czymś w rodzaju manifestu?

Używam Scala 2.9.2.

Odpowiedz

10

Można odwoływać się do EmailService z Java, ale nie ze Scala, ponieważ Scala przechowuje sygnaturę klasy jako adnotację scala.reflect.ScalaSignature. Kompilator Scala zakończy się niepowodzeniem z następującym błędem:

class EmailService in package email cannot be accessed in package shop.orders.services.email

+0

Zakładam, że jest on sprawdzany tylko podczas kompilacji, a nie w czasie wykonywania? –

+1

W środowisku wykonawczym podlegałbyś tylko sprawdzaniu modyfikatora dostępu Java, który w tym przypadku zawsze by się powiódł, ponieważ klasa jest jawna zgodnie z JVM. – yakshaver

Powiązane problemy