IntelliJ IDE中Scala应用构造函数模式的快速文档
我想知道是否有办法让IntelliJ中的快速文档适用于许多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代码中有一种具有静态工厂方法的模式(这是四人组工厂方法
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(...)