[英]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.