2012-12-04 16 views
8

Tôi có một lớp với mã này:Các đảm bảo cho vòng loại truy cập scala là gì?

package shop.orders.services.email 

private[services] class EmailService {...} 

Sau đó, trong một gói phần mềm khác nhau, tôi sử dụng lớp đó:

package shop.ui 

import shop.orders.services.email.EmailService 

class PaymentConfirmation extends WithFacesContext { 

    var emailService: EmailService = null 

Nhìn vào bytecode tạo ra, không có dấu hiệu của bất kỳ sửa đổi lần truy cập, điều này có ý nghĩa, vì Java không hỗ trợ các hạn chế truy cập như vậy. Vì vậy, điều gì sẽ xảy ra nếu tôi tạo một thư viện chứa mã như khối một, và cố gắng biên dịch khối hai đối với thư viện - không có khả năng trình biên dịch sẽ thất bại, vì thông tin bị mất. Hoặc nó có chứa trong một cái gì đó giống như một biểu hiện?

Tôi đang sử dụng Scala 2.9.2.

Trả lời

10

Bạn có thể tham khảo EmailService từ Java, nhưng không phải từ Scala, vì Scala lưu trữ chữ ký của lớp dưới dạng chú thích scala.reflect.ScalaSignature. Trình biên dịch Scala sẽ thất bại với lỗi sau:

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

+0

Tôi giả sử chỉ kiểm tra tại thời gian biên dịch và không chạy? –

+1

Khi chạy, bạn sẽ chỉ phải kiểm tra trình sửa đổi truy cập Java trong trường hợp này sẽ luôn thành công, vì lớp này là công khai theo JVM. – yakshaver

Các vấn đề liên quan