scala访问限定符的保证是什么?

scala访问限定符的保证是什么?,scala,scala-java-interop,Scala,Scala Java Interop,我有一个具有以下代码的类: package shop.orders.services.email private[services] class EmailService {...} 然后在另一个包中,我使用该类: package shop.ui import shop.orders.services.email.EmailService class PaymentConfirmation extends WithFacesContext { var emailService:

我有一个具有以下代码的类:

package shop.orders.services.email

private[services] class EmailService {...}
然后在另一个包中,我使用该类:

package shop.ui

import shop.orders.services.email.EmailService

class PaymentConfirmation extends WithFacesContext {

    var emailService: EmailService = null
查看生成的字节码,没有任何访问修饰符的迹象,这是有意义的,因为Java不支持这种访问限制。因此,如果我创建一个包含像块1这样的代码的库,并尝试针对该库编译块2,那么会发生什么呢?编译器不会失败,因为信息丢失了。或者它包含在类似于清单的东西中


我使用的是Scala 2.9.2。

您可以引用Java中的
EmailService
,但不能引用Scala,因为Scala将类的签名存储为
Scala.reflect.ScalaSignature
注释。Scala编译器将失败,并出现以下错误:

无法在package shop.orders.services.email中访问package email中的类EmailService


我假定它只在编译时检查,而不是在运行时检查?在运行时,您将只接受Java访问修饰符检查,在本例中,这将始终成功,因为根据JVM,该类是公共的。