int不会覆盖Java中的Integer

Aru*_*n R 10 java

我在Java中有一个带方法签名的函数

public void myMethod (int someInt, String someString) 
Run Code Online (Sandbox Code Playgroud)

在我的抽象类中,我用方法覆盖了它

public void myMethod (Integer someInt, String someString)
Run Code Online (Sandbox Code Playgroud)

过度骑行不起作用.这是不一致吗?我认为自动装箱也适用于方法签名覆盖.

pol*_*nts 15

int并且Integer是两种不同的类型.为了方便程序员,Autoboxing在源代码级别模糊了这种区别,但并没有改变它们实际上是两种非常不同的类型的事实.

因此,你不能@Override采用int带有a的方法,Integer反之亦然.

请注意,在声明一个方法Integer而不是一个方法之前,你应该三思而后行int.以下是Effective Java 2nd Edition的摘录,第49项:首选基元到盒装基元:

总之,只要您有选择,就可以使用原始优先于盒装原语.原始类型更简单,更快捷.如果你必须使用盒装基元,小心!自动装箱减少了使用盒装基元的冗长,但没有降低危险.当您的程序将两个盒装基元与==运算符进行比较时,它会进行身份比较,这几乎肯定不是您想要的.当你的程序进行涉及盒装和未装箱原语的混合型计算时,它会进行拆箱,当你的程序进行拆箱时,它就会抛出NullPointerException.最后,当您的程序框原始值时,它可能导致代价高昂且不必要的对象创建.

有些地方你别无选择,只能使用盒装基元,例如泛型,但是你应该认真考虑使用盒装基元的决定是否合理.

也可以看看

相关问题