我在Scala中有两个包:package foo
和package bar
。两者都有一个Utils
对象,它们具有相同的方法doSomething()
和doSomethingElse()
。代码如下所示:
内包foo
object Utils{
def doSomething()
def doSomethingElse()
}
内部包裹栏
object Utils{
def doSomething()
def doSomethingElse()
}
有没有办法可以提供一个共同点,两个包都可以使用Utils
对象中的方法?我想避免代码重复。我想到的是在其中一个包中编写一个包对象并将其导入另一个包中。但有没有更好的方法来消除代码重复?
答案 0 :(得分:3)
包对象可以继承其他特征,抽象类和类,就像任何其他对象一样。只需在适当命名的特征中提供方法,并将其包括在:
中trait SomethingHandler {
def doSomething() = ???
def doSomethingElse() = ???
}
package object foo extends SomethingHandler
package object bar extends SomethingHandler
或者,您可以使用对象并将其导入两个包命名空间:
object SomethingHandler {
def doSomething() = ???
def doSomethingElse() = ???
}
package object foo {
import some.package.SomethingHandler._
}
package object bar {
import some.package.SomethingHandler._
}
答案 1 :(得分:2)
将Utils
对象放在单独的包util
中并将其导入您使用它的位置?
或者在包对象中将其别名:
package object foo {
val Utils = util.Utils
}
如果他们没有共同的所有方法,请在特征中分解常用方法:
trait Common {
def doSomething() = ???
def doSomethingElse() = ???
}
object Utils extends Common {
...
}