Nếu tôi có các lớp sau đây được định nghĩa trong javascala override java phương pháp lớp tham chiếu đến lớp bên
public class A
{
protected class B
{
}
protected void method(B b) {...}
}
Và tôi muốn kế thừa từ nó trong scala và phương pháp ghi đè. Tôi đã có thể hy vọng có thể làm như sau:
class C extends A {
override def method(b: B): Unit = {
// ... do something
super.method(b)
}
}
Tuy nhiên trình biên dịch scala không thích khi tôi làm theo cách này đưa ra các lỗi sau:
phương pháp phương pháp ghi đè gì cả. Lưu ý: các lớp siêu hạng C chứa các thành viên không phải là thành viên cuối cùng được đặt tên phương pháp: được bảo vệ [gói ...] def (x $ 1: A # B): Đơn vị
Cách duy nhất tôi có thể làm cho nó hoạt động là làm như sau:
class C extends A {
override def method(b: A#B): Unit = {
// ... do something
super.method(b.asInstanceOf[this.B])
}
}
Tôi thấy phải làm điều này khá xấu xí và tự hỏi liệu có cách nào để làm điều đó không?
Cảm ơn
Des
Sự cố dường như liên quan đến trình biên dịch hoạt động từ trong nhật thực. Tôi đã thử nghiệm nó với sbt và nó hoạt động như mong đợi như bạn đã nói - trên thực tế, những thay đổi mà tôi đã thực hiện cho nó để biên dịch trong nhật thực không hoạt động bên trong một biên dịch sbt. Tôi sẽ điều tra thêm để thử và tìm ra vấn đề với nhật thực. – user79074
Tôi đoán vấn đề là với trình biên dịch vì nó xảy ra từ trong nhật thực cũng vậy. Đã sao chép với scala 2.9.2 và scala 2.10.1. Vì vậy, đã nộp một lỗi với dự án scala lang. – user79074
[SI-7946] (https://issues.scala-lang.org/browse/SI-7946), dành cho những người chơi cùng ở nhà. – Hugh