Scala访问修饰符有哪些保证?

8

我有一个包含以下代码的类:

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不支持这种访问限制。如果我创建一个包含类似于代码块一的代码的库,并尝试编译代码块二来使用该库 - 没有机会编译器失败,因为信息已经丢失了。或者它包含在像清单这样的东西中吗?

我正在使用Scala 2.9.2。

1个回答

10

您可以从Java中引用EmailService,但无法从Scala中引用,因为Scala将类的签名存储为scala.reflect.ScalaSignature注释。 Scala编译器将显示以下错误:

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


我猜想这只是在编译时而不是运行时进行检查? - John Smith
1
在运行时,您只需要受到Java访问修饰符检查的限制。在这种情况下,检查始终成功,因为该类根据JVM是公开的。 - yakshaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接