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