加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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测试) – 可能值得提一下这个错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读