簡體   English   中英

Java:快速/優雅的方式來檢查null

[英]Java: Quick/Elegant way to check for null

在我正在編寫的程序中,我發現自己做了以下很多事情......

Map<String,List<String>> network = loadSerializedObj(file); // null if failed
if(network != null) {
    anonNet = util.anonymize(newNet);
} else {
    // Some sort of error handling.
    System.out.println("Some sort of error message. Exiting...");
    System.exit(0);        
}

有沒有更簡潔的方法來處理事件,從文件加載序列化對象不起作用,並且該方法返回null? 任何提示都是受歡迎的。 在哪里,我可以讓它更優雅?

你應該使loadSerializedObj拋出異常而不是返回null。 當你沒有任何東西可以返回時,你可以返回null。 什么東西壞了,你應該拋出異常。

在這種情況下,您可以使用異常catch。

Map<String,List<String>> network = loadSerializedObj(file); // null if failed
try {
    anonNet = util.anonymize(newNet);
} catch(NullPointerException npe) {
    System.out.println("Some sort of error message. Exiting...");
    System.exit(0);        
}

但是你必須指定util.anonymize來拋出NullPointerException,如果還沒有的話。

你可以有某種

class MyAssert {
  static<T> assertNotNull(T object) {
    if (object == null) {
      System.out.println("something is wrong...");
      System.exit(0);
    }
    return object;
  }
}

嘗試返回空地圖而不是空值:

    if(!loadSerializedObj(file).isEmpty()) 
    {
        anonNet = util.anonymize(newNet);
    } 
    else 
    {
        // error handling    
    }

    private Map<String,List<String>> loadSerializedObj(File file) 
    {
        // do stuff
        if(mapObject == null)
        {
            mapObject = Collections.emptyMap();
        }
        return mapObject
    }

您可以對名為n(object)的函數進行靜態導入,如果為null,則返回boolean。 或者使用Groovy :)

我認為你所擁有的是在保持易於閱讀/維護代碼的同時獲得的。

番石榴的先決條件可以是一個簡潔易讀的檢查方法。

Preconditions.checkNotNull(myReference, "My error message");

暫無
暫無

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

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