2012-12-04 19 views
8

我有一类与此代码:什么是scala访问限定符的保证?

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不支持这种访问限制。那么,如果我创建一个包含代码块的代码库,并尝试针对库编译代码块2,会发生什么情况 - 因为信息丢失,编译器不会失败。或者它是否包含在清单中?

我使用的是Scala 2.9.2。

回答

10

您可以参考EmailService来自Java,但不是来自Scala,因为Scala将该类的签名存储为scala.reflect.ScalaSignature注释。斯卡拉编译器将失败,并出现以下错误:

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

+0

我认为它只在编译时检查,而不是运行时? –

+1

在运行时,您只会受到Java访问修饰符检查,在这种情况下,它总是会成功,因为该类根据JVM是公共的。 – yakshaver

相关问题