如何用IntelliJ模仿C ++风格的“自动”式演绎?

在Java的一些应用程序中,我错过了C ++中的“auto”关键字。 不要误解我的意思,这绝对不是关于语言哲学或编程实践的讨论。

例如,如果我有一个Map of Map,并且想要关联的入口集,那么代码如下所示:

Map<String, Map<String, VeryLongClassNameGetsEvenLongerAndLonger>> map = new HashMap<>(); Set<Map.Entry<String, Map<String, VeryLongClassNameGetsEvenLongerAndLonger>>> entryset = map.entrySet(); 

现在输入变量“entryset”是非常尴尬的输出和得到正确的。 在C ++中,我会在这里使用auto。 这在Java中不存在,所以我使用IntelliJ IDE提供的下一个最好的东西。 我输入

 Integer entryset = map.entrySet(); 

这显然是不正确的,但是这提示IntelliJ向我建议:

 Change variable 'entryset' type to 'Set<Map.Entry<String, Map<String, VeryLongClassNameGetsEvenLongerAndLonger>>> 

所以我只是按Alt-Enter,它是自动更正。

但是,我想知道:我可以这样做,而不通过纠正功能? 像“自动完成类型”-Hotkey,或者是/ auto / pragma或者什么东西?

  • 你可以在它之后键入一个表达式和.var ,然后按Tab键 ,它将创建一个变量声明

  • 您可以编写一个表达式并按下Ctrl + Alt + V (默认情况下),表达式将被提取到一个新的变量。

  • 如果您喜欢使用varval关键字的C#/ Scala / Kotlin样式声明,您可能会发现有用的Varsity插件。

    它可以让你用下面的方式编写变量声明:

     var entrySet = map.entrySet(); 

    然后你打回车 ,它成为

     Set<Map.Entry<TheKeyType, TheValueType>> entrySet = map.entrySet(); 

离开类型。 Intellij会建议创建一个局部变量,并从返回类型中推断出来。 例如,输入…

 entryset = map.entrySet(); 

entryset现在将变成红色,表示错误。

然后ALT + ENTER ,这应该显示一个小菜单与创建本地变量作为选项。