Scala 的快速文档在 IntelliJ IDE 中应用构造函数模式



我想知道是否有办法让 IntelliJ 中的快速文档适用于下面许多 scala 开发人员使用的类构造模式。

SomeClass(Param1,Parma2)

而不是

new SomeClass(param1,Param2)

使用new 进行的直接构造函数调用显然有效,但许多 scala 开发人员使用适用于构造对象。 使用该模式时,Intelij 文档查找无法找到有关该类的任何信息。

我不知道IntelliJ本身是否有文档。 但是,该模式相当容易解释。

Java 代码中有一种模式用于使用静态工厂方法(这是四人帮工厂方法模式的专门化(,通常类似于(翻译成 Scala-ish(:

object Foo {
def barInstance(args...): Bar = ???
}

这样做的主要好处是工厂控制对象实例化,特别是:

  • 要实例化的特定运行时类,可能基于工厂的参数。 例如,Scala 中的通用不可变集合具有工厂方法,如果它们使用足够少量的内容创建,则可以创建优化的小集合。 这方面的一个例子是,长度为 1 的序列基本上没有开销,单个字段引用对象,并检查偏移量是否为 0 并抛出或返回其唯一字段的查找。

  • 是否创建实例。 可以将参数缓存到工厂并记住或"哈希"创建的对象,或者预先创建最常见的实例并重复分发它们。

另一个好处是工厂是一个功能,而new是一个操作员,它允许工厂被传递:

class Foo(x: Int)
object Foo {
def instance(x: Int) = new Foo(x)
}
Seq(1, 2, 3).map(x => Foo(x))  // results in Seq(Foo(1), Foo(2), Foo(3))

在 Scala 中,这与以下事实相结合:该语言允许任何定义apply方法的对象在语法上用作函数(即使它不扩展Function,这将允许对象像函数一样传递(和类的"伴侣对象"(它包含 Java 中将static类中的东西(得到类似的东西:

class Foo(constructor_args...)
object Foo {
def apply(args...): Foo = ???
}

可以像这样使用:

Foo(...)

对于case class,Scala编译器自动生成一个具有某些行为的伴随对象,其中一个是与构造函数具有相同参数的apply(其他行为包括遵守契约的hashCodeequals以及允许模式匹配的unapply方法(。

相关内容

最新更新