簡體   English   中英

在Java中初始化雙變量的最安全方法

[英]Safest way to initialize double variable in java

我曾經用Double.NaN初始化雙Double.NaN變量,然后根據輸入內容將其填充。 如果輸入中有錯誤,我只返回Double.NaN 這種做法適得其反,當應用程序的其他部分使用我的函數作為輸入並正常工作時,可以進行基本算術並將NaNs與double進行比較(但不應該這樣,我會期望出現異常)。

顯而易見的解決方案是在代碼末尾添加Double.isNaN()並在函數內引發異常。但這是高度優化的代碼中使用率很高的函數,因此,我不願意在每次調用時添加額外的檢查。 我寧願每年一次用錯誤的參數破壞整個應用程序,而不是添加額外的檢查,尤其是。 我聽說與NaN花費的時間比與Double相比花費的時間更長。 我該如何實現?在這種情況下,最佳做法是什么?

例如編輯 ,我想返回參數函數的第一個參數,根據用戶輸入我一無所知

private double getFirstFactor(HashMap <String, Double> userParams) {
   double res = Double.NaN;
    if(userParams.containsKey("factor1")) {
        res = userParams.get("factor1");
    }
    return res;
}

用法

double f1 = getFirstFactor(userParams);
double threshold =  f(f1); // for example f1 * 100 + f1; 
// ideally, code above breaks if f1 is not defined and I don't go futher
if(threshold >= 0) {
...
} else {
...
}

不要那樣做

NaN用於某些表達式(例如0.0 / 0.0 )的結果,並具有將false與自身進行比較的獨特屬性。

您應該始終使用明智的方法初始化double值。 根據您的算法, 0.01.0通常是好的值。

如果您確實無法做到這一點,則可以始終使用Double ,將null作為默認初始化值。

使用輸入之前,應始終驗證輸入。 如果輸入無效,則可以在執行任何計算之前引發IllegalArgumentException 調用者有責任使用帶有正確輸入的代碼。

快速失敗總是更好,而不是在整個系統中傳播無效值。 這可能會導致大問題(如您可能已經遇到的問題)。

使用盒裝型Double和使用null作為insteed的默認值Double.NaN 如果我需要堅持使用原語,則默認值為0.0d

暫無
暫無

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

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