是否可以扩展在 Scala 的第 3 方 jar 中定义的包私有 class

Is it possible to extend a package private class defined in a 3rd party jar in Scala

是否可以在第 3 方 jar 中定义的 scala 中扩展包私有 class。因此,例如,如果我的代码所依赖的第 3 方 jar 有一些 class 这样的

private [somepackage] A {

}

我能以某种方式在我的代码中子class这个class吗?

谢谢

不是根据 Programming in Scala 3rd Ed.,解释为:

package a
package b {
  private[a] class B
}

all code outside the package a cannot access class B

注意这里,包b在包a中。

奇怪的是,REPL 中似乎并非如此:请参阅

不,你不能那样做。

如果你需要它stub/mock的话,考虑使用代理访问classA,而stub/mock那个代理class代替。例如,如果 A.doStuff 是您想要的 mock/stub,而 A.accessStuff 是您在代码中需要的,则创建一个 class

class ADecorated(underlying: A) {
  def doStuff() {
    underlying.doStuff()
    // whatever I want to do
  }

  def accessStuff() {
    x = underlying.accessStuff()
    // do something else and return
  }
 // Any other method you want to use
}

A.createA 的用法替换为新的 ADecorated(A.createA())ADecorated 是您现在使用的工具