scala - IntelliJ IDE 中 Scala 应用构造函数模式的快速文档
问题描述
我想知道是否有办法让 IntelliJ 中的快速文档适用于许多 scala 开发人员在下面使用的类构造模式。
SomeClass(Param1,Parma2)
代替
new SomeClass(param1,Param2)
使用 new 进行的直接构造函数调用显然有效,但许多 scala 开发人员使用 apply 来构造对象。当使用该模式时,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
,这将允许对象像函数一样被传递)并将“伴随对象”添加到一个类(它包含 Javastatic
中的类中的内容)以获得类似:
class Foo(constructor_args...)
object Foo {
def apply(args...): Foo = ???
}
可以像这样使用:
Foo(...)
对于 a case class
,Scala 编译器会自动生成具有某些行为的伴随对象,其中一个是具有apply
与构造函数相同的参数(其他行为包括遵守合同hashCode
以及允许模式匹配equals
的方法)。unapply
推荐阅读
- php - 如何在php中添加行分隔符(\ n)
- authentication - 如何使用 AWS CloudFormation 创建用户并将相应的 pub 文件复制到 authorized_key?
- spring-boot - SpringBoot 无法解析测试中的 devtools 属性
- javascript - 下划线如何在有多个参数时过滤所有对象
- kubernetes - kubernetes网络策略,允许访问特定ip
- rust - 如何配置 Clion,以便在 Rust 代码中显示嵌入类型提示?
- python - Python访问连接数据库错误?
- postgresql - 为什么执行 autovacuum 时未运行 autoanalyze
- android - 在 Android Studio 中提取字符串后的运行时错误
- node.js - 集群模式下的 pm2 不显示节点日志