如何使用IntelliJ伪造C ++风格的“自动”类型演绎?

时间:2016-01-28 18:09:54

标签: java generics intellij-idea

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

例如,如果我有地图地图,并且我想拥有相关的输入集,则代码如下所示:

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,还是其他东西?

2 个答案:

答案 0 :(得分:4)

  • 您可以在其后键入表达式.var,然后按 Tab ,它将创建变量声明

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

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

    它允许您以下列方式编写变量声明:

    var entrySet = map.entrySet();
    

    然后你点击 Enter 就会变成

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

答案 1 :(得分:2)

退出该类型。 Intellij将建议创建一个局部变量,并将从返回类型推断出来。例如。键入...

entryset = map.entrySet();

entryset 现在将显示为红色,表示错误。

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