![](/img/trans.png)
[英]Safest way to extract all variable refs from xpath expression in 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.0
和1.0
通常是好的值。
如果您確實無法做到這一點,則可以始終使用Double
,將null
作為默認初始化值。
使用輸入之前,應始終驗證輸入。 如果輸入無效,則可以在執行任何計算之前引發IllegalArgumentException
。 調用者有責任使用帶有正確輸入的代碼。
快速失敗總是更好,而不是在整個系統中傳播無效值。 這可能會導致大問題(如您可能已經遇到的問題)。
使用盒裝型Double
和使用null
作為insteed的默認值Double.NaN
。 如果我需要堅持使用原語,則默認值為0.0d
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.