2012-12-04 8 views
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を使用しています。

答えて

10

Scalaがクラスのシグネチャをscala.reflect.ScalaSignature注釈として保存するため、EmailServiceをJavaから参照できますが、Scalaから参照することはできません。 Scalaコンパイラは、次のエラーで失敗します。

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

+0

コンパイル時には実行時のみチェックされているとしますか? –

+1

実行時には、Javaアクセス修飾子のチェックを受けることになります。この場合、このクラスはJVMに従ってパブリックなので、この場合は常に成功します。 – yakshaver

関連する問題