我在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.最后,当您的程序框原始值时,它可能导致代价高昂且不必要的对象创建.
有些地方你别无选择,只能使用盒装基元,例如泛型,但是你应该认真考虑使用盒装基元的决定是否合理.
int num = Integer.getInteger("123")扔NullPointerException?(!!!)| 归档时间: |
|
| 查看次数: |
5113 次 |
| 最近记录: |