簡體   English   中英

scala覆蓋引用內部類的java類方法

[英]scala override java class method that references inner class

如果我在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測試) - 可能值得提一下這個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM