scala覆盖引用内部类的java类方法
发布时间:2020-12-16 18:30:23 所属栏目:安全 来源:网络整理
导读:如果我在 java中定义了以下类 public class A{ protected class B { } protected void method(B b) {...}} 我想在scala和override方法中继承它.我本希望做到以下几点: class C extends A { override def method(b: B): Unit = { // ... do something super.
如果我在
java中定义了以下类
public class A { protected class B { } protected void method(B b) {...} } 我想在scala和override方法中继承它.我本希望做到以下几点: class C extends A { override def method(b: B): Unit = { // ... do something super.method(b) } } 但是scala编译器不喜欢我这样做时给出以下错误: 方法方法不会覆盖任何内容.注意:C类的超类包含以下非最终成员命名方法:protected [package …] def方法(x $1:A#B):单位 我能使它工作的唯一方法是执行以下操作: class C extends A { override def method(b: A#B): Unit = { // ... do something super.method(b.asInstanceOf[this.B]) } } 我发现必须做到这一点非常难看,并想知道是否有更简洁的方法吗? 谢谢 梅 解决方法
明显的代码对我有用:
public class A { public class B {} protected void method(B b) { System.out.println("A#method"); } } class C extends A { override def method(b: B): Unit = { println("C#method") super.method(b) } } 然后在sbt控制台中: scala> new C res0: C = C@10ecc87a scala> new res0.B res1: res0.B = A$B@db9a93b scala> res0.method(res1) C#method A$B@db9a93b A#method A$B@db9a93b 但是,如果我然后修改C.scala并让sbt进行增量重新编译,我会看到你看到的错误(用0.12.4和0.13.0测试) – 可能值得提一下这个错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |