What are the guarantees for scala access qualifier

2019-06-16 11:01发布

I have a class with this code:

package shop.orders.services.email

private[services] class EmailService {...}

Then in a different package, I use that class:

package shop.ui

import shop.orders.services.email.EmailService

class PaymentConfirmation extends WithFacesContext {

    var emailService: EmailService = null

Looking at the generated bytecode, there is no sign of any access modifier, which makes sense, as Java does not support such access restrictions. So what happens if I create a library containing code like block one, and attempt to compile block two against the library - there is no chance that the compiler will fail, since the information is lost. Or is it contained in something like a manifest?

I'm using Scala 2.9.2.

1条回答
Viruses.
2楼-- · 2019-06-16 11:22

You could reference EmailService from Java, but not from Scala, because Scala stores the signature of the class as a scala.reflect.ScalaSignature annotation. The Scala compiler will fail with the following error:

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

查看更多
登录 后发表回答