Tôi có một lớp Java mà tôi đã chuyển sang Scala, nhưng vẫn có một số lớp con Java triển khai chức năng trừu tượng.Tôi có thể tạo phương thức có quyền truy cập Java được bảo vệ trong Scala không?
Java ban đầu có
public abstract class Base {
...
protected abstract Foo getFoo();
}
mà đã được mở rộng
public class Fred extends Base {
...
protected Foo getFoo() {
return foo;
}
}
Bây giờ khi tôi cổng cơ sở để Scala
class Base {
...
protected def getFoo(): Foo
}
Trình biên dịch phàn nàn rằng
Không thể làm giảm tầm nhìn của các phương pháp di truyền ...
Bây giờ tôi hiểu rằng vì quy tắc của nó là tinh tế khác nhau, Scala có xu hướng để thực thi tầm nhìn trong trình biên dịch chứ không phải là bytecode, do đó getFoo là đánh dấu công khai trong lớp javap'd. Nhưng
protected[packagename] def getFoo()
vẫn không tạo phương pháp bảo vệ pukka (Java) mặc dù tôi cho rằng mức hiển thị phải giống nhau.
Có cách nào để thuyết phục trình biên dịch Scala phát ra một phương thức mà Java sẽ xem xét được bảo vệ không?
Tôi sẽ chấp nhận một quyền 'No' –
Câu hỏi hay. Tôi đã đi theo con đường chính xác trước khi đến trang này. – ebruchez