0

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

private [somepackage] A {

}

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

谢谢

4

2 回答 2

1

不是根据Scala 3rd Ed 中的编程。,转述:

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

包外的所有代码a都不能访问类B

请注意,此处的 packageb位于 package 中a

奇怪的是,在 REPL 中似乎并非如此:请参阅这篇文章

于 2018-07-26T15:24:43.137 回答
1

不,你不能那样做。

如果您需要它来存根/模拟它,请考虑使用代理来访问 A 类,并改为存根/模拟该代理类。例如,如果 A.doStuff 是您想要模拟/存根的,而 A.accessStuff 是您的代码中需要的,则创建一个类

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是你现在的工作

于 2018-07-26T17:19:41.117 回答