有没有办法扩展一个对象?
在scala中,我们不能扩展object
:
object X object Y extends X
给出错误error: not found: type X
在我的情况下,有人已经定义了一些对象的function,我需要扩展它(基本上添加另一种方法)。 什么是最简单的方法来扩展这个对象?
往往正确的答案取决于实际的业务需求。 从某个对象中延伸出来,在某种意义上违背了这个对象的目的,因为它不再是一个单独的对象。
可能的解决scheme是将行为抽象为抽象特征。 并创build扩展这种特质的对象,如下所示:
trait T{ // some behavior goes here } object X extends T object Y extends T { // additional stuff here }
如果你想使用另一个对象的方法和值,你可以使用导入。
object X{ def x = 5 } object Y{ import X._ val y = x }
你实际上不能扩展一个对象,因为它会创build两个对象,而且一个对象的定义只能存在一次(编辑:呃,这不是真的,因为对象定义可以在一个类或方法中)。
为了您的目的,试试这个:
object X { } object Y { def a = 5 } implicit def xToY(x: X.type) = Y println(Xa)
它并没有实际扩展,但它确实允许你调用比最初定义的新方法。
在两个对象之间共享代码的唯一方法是拥有一个或多个共同的超类/特征。
您可以将父项转换为类+伴随对象,然后有子类扩展类Eg
在Parent.scala中
class Parent {} object Parent extends Parent {}
然后在Child.scala
object Child extends Parent {}
是的,这比解决scheme更为黑客。