यह बहुत सूक्ष्म है। Float.parseFloat
float
लौटाता है, Float
नहीं। एक सशर्त ऑपरेटर के दूसरे दो ऑपरेशन एक ही प्रकार के होने चाहिए, लेकिन आप इसे float
(Float.parseFloat
का परिणाम) और Float
(def
) दे रहे हैं। कंपाइलर float
चुनता है क्योंकि Float
ऑटो-अनबॉक्सिंग के माध्यम से float
पर ले जाया जा सकता है।
तो क्या संकलक आउटपुट के रूप में यद्यपि आप इस लिखा था है:
private static Float toFloat(Float def, String str) {
try {
return str != null ? Float.parseFloat(str) : def.floatValue();
// Note ----------------------------------------^^^^^^^^^^^^^
} catch (NumberFormatException e) {
return def;
}
}
... और हां, बुला floatValue
null
पर एक एनपीई फेंकता है।
तुम्हें यकीन दूसरे संकार्य के प्रकार Float
, नहीं float
है बनाकर इसे ठीक कर सकते हैं। तरीके कि ऐसा करने के लिए बहुत से, लेकिन Zefick points out के रूप में, सबसे सरल Float.valueOf(String)
है:
private static Float toFloat(Float def, String str) {
try {
return str != null ? Float.valueOf(str) : def;
} catch (NumberFormatException e) {
return def;
}
}
स्रोत
2017-01-17 11:25:05
Float.valueOf (एसटीआर) – Zefick
@Zefick: रवींद्र! हां वास्तव में ... –
स्पष्टता के लिए मेरा सुझाव, '?' ऑपरेटर से छुटकारा पाने और सरल 'if' का उपयोग करना होगा। हां, आपके पास कोड की कुछ और पंक्तियां होंगी। लेकिन यह समझने में भी आसान तरीका होगा कि क्या हो रहा है, जबकि पार्सिंग और तुरंत पूंजी फ्लोट पर कास्टिंग करने से मुझे लगता है कि "क्या बिल्ली मैं वापस कर रहा था ..." कुछ महीने बाद ... :) - खैर 'valueOf' निश्चित रूप से सबसे आसान तरीका है ... दुह! – Quota