是否可以在第3方jar中定义的scala中扩展包私有类。因此,例如,如果我的代码所依赖的第3方jar具有这样的类
private [somepackage] A {
}
我可以以某种方式在我的代码中继承该类吗?
谢谢
答案 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
是您现在使用的东西