我有一个用Scala编写的抽象基类,它扩展了第三方(开源)Java 7类:
SkyBar
所以基本上我希望能够构造新的SpaceBar
和Foo
实例,强制它们在构造函数中接受Bar
参数。随后我希望super()
构造函数:
Fizz
上调用其setFoo(foo)
(无参数)父构造函数;但是Foo
实例上调用其父var divs = $(".contents");
for(var i = 0; i < divs.length; i+=2) {
j = i + 1;
divs.slice(i, i+2).wrapAll("<div id='newDivforWraping"+j+"' class='new'></div>");
}
setter 我是Scala的新手,无法透过树林看到森林。如何让所有这些结合在一起?!
答案 0 :(得分:2)
您可以在setFoo
的正文中拨打Bar
。
abstract class Bar(val foo: Foo) extends Fizz {
setFoo(foo)
}
我不认为您希望foo
成为公共领域(因为val
修饰符):
abstract class Bar(foo: Foo) extends Fizz {
setFoo(foo)
}
否则你有一个不可变字段foo
和一个可变(get / set)Foo属性。
要详细说明这一点,如果你foo
val
,你就会遇到这样的不一致:
scala> class Bar(val foo: Foo) extends Fizz {
| setFoo(foo)
| }
defined class Bar
scala> val bar = new Bar(Foo(1))
bar: Bar = Bar@3a384e3d
scala> bar.getFoo
res7: Foo = Foo(1)
scala> bar.foo
res8: Foo = Foo(1)
scala> bar.setFoo(Foo(2))
scala> bar.getFoo
res10: Foo = Foo(2)
scala> bar.foo
res11: Foo = Foo(1) // still the old foo!!!
如果您不公开val
,则不会bar.foo
。