为什么人们定义对象扩展其伴生类?

发布于 2024-10-17 07:24:34 字数 91 浏览 0 评论 0原文

我发现这种代码在Lift框架中很常见,写法如下:
对象 BindHelpers 扩展 BindHelpers {} 这意味着什么?

I find this kind of code is very common in Lift framework, written like this:
object BindHelpers extends BindHelpers {}
What does this mean?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

野却迷人 2024-10-24 07:24:34

在这种情况下,BindHelpers 是一个特征而不是一个类。让 foo() 成为 BindHelpers 中定义的方法,您可以访问它。

  1. 通过伴生对象使用它:BindHelpers.foo()

  2. 混合在类中混合特征 BindHelpers ,从而能够访问其中的方法。

例如:

class MyClass extends MyParentClass with BindHelpers {
  val a = foo()
}

Scalatest 中的 ShouldMatchers 使用了相同的技术。

In this case, BindHelpers is a trait and not a class. Let foo() to be a method defined in BindHelpers, to access it you can either.

  1. Use it through the companion object: BindHelpers.foo()

  2. Mix the trait BindHelpers in a class and thus be able to access the methods inside of it.

For instance:

class MyClass extends MyParentClass with BindHelpers {
  val a = foo()
}

The same techniques is used in Scalatest for ShouldMatchers for instance.

ぃ双果 2024-10-24 07:24:34

您可以找到 David Pollak 的回答 liftweb 组中有同样的问题。

You can find David Pollak's answer to the same question in the liftweb group.

妄想挽回 2024-10-24 07:24:34

对象 扩展其伴生类很有趣,因为它将具有与该类相同的类型。

如果object BindHelpers 没有扩展BindHelpers,它将是BindHelpers$ 类型。

It's interesting for an object to extend its companion class because it will have the same type as the class.

If object BindHelpers didn't extend BindHelpers, it would be of type BindHelpers$.

忆依然 2024-10-24 07:24:34

这里的模式可能是其他的。我不知道 Lift 可以回答这个问题,但是 object 存在一个问题,因为它们不可模拟。因此,如果您在可以模拟的 class 中定义所有内容,然后让对象扩展它,您就可以模拟该类并在测试中使用它而不是对象。

It might be that the pattern here is other. I don't know Lift to answer this, but there's a problem with object in that they are not mockable. So, if you define everything in a class, which can be mocked, and then just makes the object extend it, you can mock the class and use it instead of the object inside your tests.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文