【问题标题】:New constructors for classes with Scala rich wrapping (implicit)具有 Scala 丰富包装的类的新构造函数(隐式)
【发布时间】:2011-10-01 06:01:22
【问题描述】:

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

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

想法?

【问题讨论】:

  • 你不想要一个工厂吗?
  • 这可能是最好的解决方案,创建一个单独的对象工厂。

标签: scala constructor implicit-conversion


【解决方案1】:

听起来您想使用 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 的实例,其中 bar = 42,baz = 0。

【讨论】:

  • 是的。 @Janne,简而言之,您是对的,您根本无法“模拟”您将使用 new 调用的新构造函数,但您可以改用这种技术。
  • 该库是第三方库,所以我不想修改那里的类,我认为出于同样的原因我不能为这些类创建伴随对象?
【解决方案2】:

是的,您需要结合使用“Pimp my Library”方法和apply factory method

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多