2015-06-22 69 views
-1

我有一个方法接受一个长的原始值并根据它做一些处理。它最初是int,后来改变了。实际调用此方法的代码是使用Integer调用此方法,因为前面的代码是java Autoboxing and Unboxing应该接受一个I​​nteger对象的java方法接受一个I​​nteger对象吗?

但是,这已经改变为长期后,我的代码并没有显示任何编译时错误,而建设如我所料。现在,如果我将其更改为int而不是Integer,则会显示编译时错误,但不会显示Integer。

这是怎么发生的?

编辑:

class ABC { 
    public Customer customerExists(long cid) throws Exception { 
    ... 
    } 
} 

class XYZ { 
    public void method() { 
     Integer customerId = null; 
     ... 
     customerExists(customerId); 
     ... 
    } 
} 

这应该是根据我的,但它不是一个编译时错误。

Java版本 - OpenJDK的版本 “1.8.0_31” OpenJDK的 运行时环境(建立1.8.0_31-B13) OpenJDK的64位服务器VM(建25.31-B07,混合模式)

+0

您能否提供一个有问题的示例代码???另外,如果您可以指定您的JDK版本,它将有所帮助...我无法重现此... – Codebender

+0

您是否可以共享代码例如,我们看到你的意思是什么 – Mureinik

+2

代码请准确的编译错误你所描述的内容不能发生! – Seelenvirtuose

回答

0

可以测试一些变化,以提高你的代码,看看这段代码:

class ABC { 
    public Customer customerExists(Number cid) throws Exception { 
    ... 
    if(cid instanceof Integer) { 
    cid.intValue()..... 
    } 


    } 
} 

class XYZ { 
    public void method() { 
     Integer customerId = null; 
     ... 
     customerExists(customerId); 
     ... 
    } 
} 

,所以你可以通过任何类型的数字,来看看这个类中,你需要的任何类型的数字转换。 ( number class

+0

我不是要求任何解决方法或解决方案。我想知道为什么java中给出的java是强类型的,这不是Java中的编译时错误。 – Pankaj

相关问题