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

时间:2018-07-26 14:51:53

标签: scala package-private

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

private [somepackage] A {

}

我可以以某种方式在我的代码中继承该类吗?

谢谢

2 个答案:

答案 0 :(得分:1)

不是根据Scala第三版中的编程解释的:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="myTosterror">Sare Jaha Se Achcha Hindustan Hamara Hum Bulbule hai eske ye gulsita hamara. sare jaha se achcha hindustan hamara.<a id="close">[close]</a></div>
  

软件包package a package b { private[a] class B } 之外的所有代码都无法访问类a

请注意,此处的软件包B位于软件包b中。

奇怪的是,REPL中似乎不是这种情况:请参见this post

答案 1 :(得分: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是您现在使用的东西