2014-04-07 15 views
147

की आपूर्ति करने में सक्षम प्रदान करते हैं मैं एक अपवाद प्रकार है कि एक निर्माता पैरामीटर के लिए पूछता है के साथजावा 8 विधि संदर्भ: एक प्रदायक एक पैरामिट्रीकृत परिणाम

java.util.Optional.orElseThrow() 

उपयोग करना चाहते हैं। कुछ ऐसा:

orElseThrow(MyException::new(someArgument)) // obviously NOT working 

क्या कोई प्रदायक बनाने वाला कोई तरीका है जो मेरा तर्क मान पास करता है?

+19

की तरह एक त्रुटि संदेश मिल जाएगा तुम क्यों नहीं कर सकते 'orElseThrow (() -> नई MyException (someArgument))'? –

उत्तर

289

निश्चित रूप से। orElseThrow(() -> new MyException(someArgument))

17

ऐसा प्रतीत होता है कि आप विधि orElseThrow से केवल RuntimeException फेंक सकते हैं। नहीं तो आप MyException cannot be converted to java.lang.RuntimeException

+1

धन्यवाद, यह ग्रोवी में 'वैकल्पिक' का उपयोग करते समय मुझे फेंक रहा था। एक ग्रोवी क्लोजर से 'अपवाद' फेंकने की कोशिश कर रहा है, लेकिन यह 'java.lang.reflect.UndeclaredThrowableException' के साथ विफल रहा, 'RuntimeException' में बदलकर इसे ठीक किया गया। –

+0

इसके बारे में जानना अच्छा है। सौभाग्य से मेरे मामले में, मैं रनटाइम अपवाद का उपयोग कर रहा हूं, लेकिन यह हमेशा मामला नहीं हो सकता है। – hbobenicio

3
optionalUsers.orElseThrow(() -> new UsernameNotFoundException("Username not found")); 
संबंधित मुद्दे