8

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.

4

1 回答 1

10

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

于 2012-12-04T22:19:49.897 回答