是否可以扩展在 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
是您现在使用的工具
是否可以在第 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 classB
注意这里,包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
是您现在使用的工具