【问题标题】:What are the guarantees for scala access qualifiers?scala 访问限定符的保证是什么?
【发布时间】:2012-12-04 21:46:10
【问题描述】:

我有一个使用此代码的课程:

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。

【问题讨论】:

    标签: scala scala-java-interop


    【解决方案1】:

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

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

    【讨论】:

    • 我认为它只在编译时检查而不是运行时检查?
    • 在运行时,您只需要进行 Java 访问修饰符检查,在这种情况下总是会成功,因为根据 JVM,该类是公共的。
    猜你喜欢
    • 2012-04-19
    • 2018-08-28
    • 2014-07-09
    • 2014-05-22
    • 2013-10-26
    • 2012-05-17
    • 2016-12-11
    • 2014-09-14
    • 2011-12-16
    相关资源
    最近更新 更多