我正在寻找一种以可访问外部作用域(包装类)的方式声明内部类的方法。这两个类都非常庞大,所以我想在不同的文件中声明它们。例如,我想做类似的事情:
A.scala:
class A(_secret:Int){
val secret = _secret
var clazz:Class = null
}
B.scala:
A.clazz = class B{
def getSecret(){
A.secret
}
}
整个目的是避免将this
作为构造函数参数传递,i。即var clazz = new B(this)
。
答案 0 :(得分:0)
可能本身不是答案,但通常反过来也是如此:
A.scala:
class A{
type clazz = B
}
B.scala:
class B{
}
trait Foo { self: Bar =>
def fooSecret = "foo secret"
def foo() {
println("I'm foo, but also know bar's secrets: " + self.barSecret)
}
}
trait Bar { self: Foo =>
def barSecret = "bar secret"
def bar() {
println("I'm bar, but also know foo's secrets: " + self.fooSecret)
}
}
class Impl extends Foo with Bar
val x = new Impl
x.foo()
x.bar()
导致
I'm foo, but also know bar's secrets: bar secret
I'm bar, but also know foo's secrets: foo secret
请注意,我使用了def和不同的方法名称(在混入时很重要,因为涉及到继承)