[英]Insert inferred type annotation for Scala val/var/def
目前,我在我的Scala类,特征和对象[1]中输入公共val
, var
和def
的类型注释 - 通过在心理上推断它们的类型,或偶尔通过将鼠标悬停在Eclipse中的标识符来找出表示编译器认为类型应该是什么[2]。 如何自动添加这些类型注释?
添加显式类型的目的是“锁定”模板的公共成员的类型,这样如果开发人员将来以导致不兼容类型的方式更改成员的定义,他们将获得编译时错误,除非他们故意更改类型注释。
脚注:
[1]除非它们覆盖超类型中的成员,并且类型应该与被覆盖成员的类型相同,这通常是我的代码中的覆盖的情况。
[2]这并不总是正确的; 当涉及覆盖超类型成员的成员时,表示编译器似乎很弱。
对于在Mac上使用IDEA的用户,以下作品:
⌥ (Alt) + return
也就是说,按住Alt并按回车键/回车键。
然后选择“向值定义添加类型注释”。
有一个功能请求快速修复在声明中插入推断类型( scala-ide#1433 ),但尚未有任何贡献。
这不是您问题的直接解决方案,但如果您对这些函数进行单元测试,那么您的测试将“强制”返回类型,并在有人更改返回类型时中断。
例如,在specs2中它可能看起来像:
foo(arg1) must be equalTo Success
另一个部分解决方案是scalastyle SBT插件( http://www.scalastyle.org/rules-0.2.0.html ),它可以向您发出有关推断类型的公共成员的警告。
在Eclipse中:将鼠标悬停在标识符上,单击以展开悬停,三击以选择全部,按Ctrl + C(或Cmd + C)进行复制,单击代码以删除悬停,单击返回您所在的位置,Ctrl + V粘贴,然后最后删除所有错误/过度冗长/冗余的东西。
输入正确的类型可能会更快。
有没有人有更好的方法?
使用IDEA Intellij 15:文件菜单>设置>编辑器>意图
最小化意图并选择Scala> Type并确保选中“Toggle Type Annotation”。
然后,当您选择(变量或函数)定义并按Alt + [Enter]时,它会询问您是否要插入推断类型 - 点击[回车]来执行此操作。
我知道这是两个击键,但它仍然比选择,复制和粘贴更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.