我想知道是否有办法让 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
(其他行为包括遵守契约的hashCode
和equals
以及允许模式匹配的unapply
方法(。