2015-06-22 66 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

相關問題