首页 > 解决方案 > IntelliJ IDE 中 Scala 应用构造函数模式的快速文档

问题描述

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

SomeClass(Param1,Parma2)

代替

new SomeClass(param1,Param2)

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

标签: scalaintellij-ideadocumentationapplyintellij-plugin

解决方案


我不知道 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,这将允许对象像函数一样被传递)并将“伴随对象”添加到一个类(它包含 Javastatic中的类中的内容)以获得类似:

class Foo(constructor_args...)

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

可以像这样使用:

Foo(...)

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


推荐阅读