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 はそのようなアクセス制限をサポートしていないため、アクセス修飾子の兆候はありません。ブロック 1 のようなコードを含むライブラリを作成し、そのライブラリに対してブロック 2 をコンパイルしようとするとどうなるでしょうか。情報が失われるため、コンパイラが失敗する可能性はありません。それともマニフェストのようなものに含まれていますか?

Scala 2.9.2 を使用しています。

4

1 に答える 1

10

Java からは参照できますEmailServiceが、Scala からは参照できません。これは、Scala がクラスの署名をscala.reflect.ScalaSignature注釈として格納するためです。Scala コンパイラは次のエラーで失敗します。

パッケージ email のクラス EmailService は、パッケージ shop.orders.services.email ではアクセスできません

于 2012-12-04T22:19:49.897 に答える