如何用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 (默认情况下),表达式将被提取到一个新的变量。
-
如果您喜欢使用
var
和val
关键字的C#/ Scala / Kotlin样式声明,您可能会发现有用的Varsity插件。它可以让你用下面的方式编写变量声明:
var entrySet = map.entrySet();
然后你打回车 ,它成为
Set<Map.Entry<TheKeyType, TheValueType>> entrySet = map.entrySet();
离开类型。 Intellij会建议创建一个局部变量,并从返回类型中推断出来。 例如,输入…
entryset = map.entrySet();
entryset现在将变成红色,表示错误。
然后ALT + ENTER ,这应该显示一个小菜单与创建本地变量作为选项。