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

IntelliJ IDE中Scala应用构造函数模式的快速文档,scala,intellij-idea,documentation,apply,intellij-plugin,Scala,Intellij Idea,Documentation,Apply,Intellij Plugin,我想知道是否有办法让IntelliJ中的快速文档适用于许多scala开发人员在下面使用的类构造模式 SomeClass(Param1,Parma2) 而不是 newsomeclass(param1,Param2) 使用new进行的直接构造函数调用显然有效,但许多scala开发人员使用apply来构造对象。使用该模式时,IntelliJ文档查找无法找到有关该类的任何信息。我不知道IntelliJ本身是否有文档。然而,这种模式很容易解释 Java代码中有一种具有静态工厂方法的模式(这是四人组工厂方法

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

SomeClass(Param1,Parma2)

而不是

newsomeclass(param1,Param2)


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

我不知道IntelliJ本身是否有文档。然而,这种模式很容易解释

Java代码中有一种具有静态工厂方法的模式(这是四人组工厂方法模式的一种特殊化),通常大致如下(翻译成Scala-ish):

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

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

  • 是否创建实例。可以将参数缓存到工厂,并对创建的对象进行记忆或“hashcons”,或者预创建最常见的实例并重复分发它们

另一个好处是,工厂是一个功能,而
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中类中的
静态
)以获得如下内容:

class Foo(constructor_args...)

object Foo {
  def apply(args...): Foo = ???
}
可以像这样使用:

Foo(...)

对于
case类
,Scala编译器会自动生成一个具有特定行为的伴随对象,其中一个是
apply
,其参数与构造函数相同(其他行为包括遵守契约的
hashCode
等于
,以及允许模式匹配的
不应用的
方法).

我想你指的是案例类?@ShankarShastri我对我的问题进行了编辑,以便更清楚。也许一些阅读我问题的人从未使用过intelij中的文档功能。intelij中有一个功能叫做“快速文档”(osx中的ctr j)。它允许您查看对象和其他文档的参数。它目前不适用于通常使用scalas apply方法实现的factory模式。这就是这个问题的内容。
Foo(...)