具有 Scala 丰富包装(隐式)的类的新构造函数

发布于 2024-11-24 20:12:45 字数 212 浏览 1 评论 0原文

在 Scala 中,您可以通过创建包装类并使用“隐式定义”将原始类转换为丰富的包装类,向现有类“添加新方法”。

我有一个用于图形的java库,它使用大量带有长浮点数列表的构造函数。我很想通过丰富的包装向这些类添加新的构造函数,但这似乎不像上面的方法那样工作。换句话说,我希望有更简单的构造函数,但仍然能够继续使用原始类名而不是某些包装类名,但目前我没有看到其他选项。

有想法吗?

In Scala, you can "add new methods" to existing classes by creating wrapper class and using "implicit def" to convert from the original class to the rich wrapper class.

I have a java library for graphics that uses plenty of constructors with looong lists of floats. I would love to add new constructors to these classes with rich wrapping but this doens't seem to work like the above for methods. In other words, I would like to have simpler constructors but still to be able to keep using the original class names and not some wrapper class names but currently I see no other options.

Ideas?

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

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

发布评论

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

评论(2

日裸衫吸 2024-12-01 20:12:45

听起来您想使用 Scala 的 apply(...) 工厂方法,您可以将其构建到类的伴随对象中。

例如,如果您有:

class Foo(val bar: Int, val baz: Int) {
  ... class definition ...
}

您可以添加(在同一个文件中):

object Foo {
  def apply(bar: Int) = new Foo(bar, 0)
}

有了这个,创建一个新的 Foo 实例,只需提供 bar 参数,就像这样简单

val myBar = 42
val myFoo = Foo(myBar) // Note the lack of the 'new' keyword.

这将导致 myFoo 被分配一个 Foo 实例,其中条 = 42,巴兹 = 0。

Sounds like you want to use Scala's apply(...) factory methods, which you build in to the companion object for your class.

For example, if you have:

class Foo(val bar: Int, val baz: Int) {
  ... class definition ...
}

You could add (in the same file):

object Foo {
  def apply(bar: Int) = new Foo(bar, 0)
}

With this in hand, creating a new Foo instance, just providing the bar parameter, is as easy as

val myBar = 42
val myFoo = Foo(myBar) // Note the lack of the 'new' keyword.

This will result in myFoo being assigned an instance of Foo where bar = 42, and baz = 0.

捎一片雪花 2024-12-01 20:12:45

是的,您需要结合使用“Pimp my Library”方法和应用工厂方法

Yes, you need a combination of the "Pimp my Library" approach and an apply factory method.

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