有没有办法扩展一个对象?

在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更为黑客。