簡體   English   中英

Java自動拆箱 - 是否有編譯器警告?

[英]Java automatic unboxing - is there a compiler warning?

我是Java中自動裝箱的忠實粉絲,因為它節省了許多丑陋的鍋爐板代碼。 但是我發現自動拆箱在某些可能為null的情況下會引起混淆。 有沒有辦法檢測代碼庫中帶有javac警告的自動拆箱位置? 任何其他解決方案來檢測僅出現拆箱(例如FindBugs或特定於Eclipse的編譯器警告)將不勝感激,因為我找不到任何解決方案。

為了澄清我不希望在拳擊上生成任何警告 - 僅取消裝箱。

下面是一些可能導致混淆NullPointerExceptions的代碼的簡單示例:

class Test {
    private Integer value;

    public int getValue() {
        return value;
    }
}

對。 在Eclipse中:

首選項 - > Java->編譯器 - >錯誤/警告 - >潛在的編程問題 - >裝箱和拆箱轉換

不幸的是沒有。 這是自動取消裝箱號碼的問題之一。 您可以

  • 將其初始化為默認值,例如private Integer value = 0
  • 檢查null return value != null ? value : 0 return value != null ? value : 0

我個人更喜歡第一種方法。 一般來說,我認為你不會有太多你應該有空號的情況。

另外,為什么使用大整數來存儲值。 如果你只是返回一點int,為什么不這樣存儲呢?

Eclipse將允許您進行語法顏色裝箱和拆箱操作(但不是一個或另一個)。 我把它們設置為鮮紅色:如果發生任何一種情況,這意味着我在匹配參數和參數方面一直很邋。

我懷疑這是一個警告案例。 這是自動拳擊的怪癖之一。

Joshua Bloch在他的“Effective Java”一書中闡述了這一點。 基本上,編譯器正在嘗試為您做更多的事情。 換句話說,這種類型的問題通常與使用有關,因此,很難“發現錯誤”,因為從語義上講,錯誤根本就不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM