java中不必要的拆箱 - 如何重构代码?

Mat*_*der 7 java boxing intellij-idea

我有以下Java 8代码(为演示而简化):

public Double fooBar(int a) {
    return Double.valueOf(a);
}
Run Code Online (Sandbox Code Playgroud)

现在IntelliJ IDEA告诉我,我在return语句中有不必要的装箱.我知道这个问题,如果a是一个double类型,但int我觉得我需要拳击转换double.

有没有一种很好的方法来重构我目前看不到的代码,或者此时IntelliJ IDEA的错误消息根本不是最佳的?

感谢帮助

vik*_*eve 10

如果你使用alt-enter来使用建议的分辨率"删除拳击",结果如下:

public Double fooBar(int a) {
    return (double) a;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,从转换intdouble是很明确的,而同时避免人工拳.


Ami*_*val 6

如何在整个过程中保持原始境界?

public double fooBar(int a) {
    return a;
}
Run Code Online (Sandbox Code Playgroud)

  • @uval:我最喜欢的例子,你不能只删除装箱/拆箱(从普通的 Java 中):如果你有 `List<Integer> a = new ArrayList<>()` 并且你添加数字 3、2 和 1,然后调用`a.remove(1)`,它实际上会删除位置1,即2。如果你调用`a.remove(Integer.valueOf(1))`,它会删除元素1。IntelliJ IDEA实际上知道这一点并且会不建议在这里更正:-D (2认同)