জাভা 8 পদ্ধতির উল্লেখ: সরবরাহকারী একটি প্যারামিটারাইজড ফলাফল সরবরাহ করতে সক্ষম সরবরাহ করুন


259

আমি ব্যবহার করতে চাই

java.util.Optional.orElseThrow()

একটি ব্যতিক্রম প্রকারের সাথে যা কনস্ট্রাক্টর প্যারামিটারের জন্য জিজ্ঞাসা করে। এটার মতো কিছু:

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

এমন কোনও সরবরাহকারী তৈরি করার কোনও উপায় আছে যা আমার যুক্তির মানটি পাস করে?


43
আপনি করতে পারবেন না কেন orElseThrow(() -> new MyException(someArgument))?
— ক্রিস্টোফার হামারস্ট্রিম

6
প্রচুর স্ট্রিম এবং ptionচ্ছিক অভিজ্ঞতার সাথে পেশাদার জাভা প্রোগ্রামার… আমি এখনও মাঝে মাঝে এখানে শেষ করি। আর এ কারণেই আমি কোটলিনকে পছন্দ করি।
— ড্র স্টিফেন্স

উত্তর:



22

এটি প্রদর্শিত হয় যে আপনি পদ্ধতি থেকে কেবল রানটাইমএক্সসেপশন নিক্ষেপ করতে পারেন orElseThrow। অন্যথায় আপনি যেমন একটি ত্রুটি বার্তা পাবেন MyException cannot be converted to java.lang.RuntimeException

আপডেট : - এটি জেডিকের পুরানো সংস্করণ সহ একটি সমস্যা ছিল। আমি সর্বশেষতম সংস্করণ সহ এই সমস্যাটি দেখতে পাচ্ছি না।


1
ধন্যবাদ, Optionalগ্রোভির ব্যবহার করার সময় এটি আমাকে ফেলে দিচ্ছিল। চেষ্টা throw Exceptionএকটি খাঁজকাটা অবসান থেকে, কিন্তু এটি ব্যর্থ java.lang.reflect.UndeclaredThrowableException, একটি পরিবর্তন RuntimeExceptionএটি সংশোধন করা হয়েছে।
— টেড নালিড

সে সম্পর্কে জেনে রাখা ভাল। ভাগ্যক্রমে আমার ক্ষেত্রে, আমি রানটাইম এক্সেপশন ব্যবহার করছি, তবে এটি সর্বদা ক্ষেত্রে নাও হতে পারে।
— hbobenicio

শ্রেণীর ডকুমেন্টেশন অনুসারে ভুলOptional.orElseThrow যা এর জন্য বলেছে যে আপনি Throwableকোনও Errorবা কোনও অর্থ ফেলে দিতে পারেন Exception।
— তুলসী বাউরক

আমি মনে করি এটি JDK 8 এর পুরানো সংস্করণ সহ একটি ইস্যু ছিল Man
— মানু

@ মানু সম্ভবত আপনি এই প্রশ্নে আলোচিত জেডিকে -8047338 উল্লেখ করছেন , অপশনাল.ওরএলসথ্রো দিয়ে স্ট্রিমের ভিতরে রানটাইম এক্সেকশনটি নিক্ষেপ করুন । যদি তা হয় তবে আপনার উত্তরে অন্তর্ভুক্ত করুন। এটি স্পট-অন হয় কি না তা জানার জন্য আমার পর্যাপ্ত পরিমাণে কফি নেই, তাই আমি নিজের উত্তরটি সম্পাদনা করা থেকে বিরত থাকব।
— তুলসী বাউরক

10
optionalUsers.orElseThrow(() -> new UsernameNotFoundException("Username not found"));

আমি ত্রুটি পাচ্ছি "<চ্ছিক <কুইরিএন্টিটিস> টাইপের পদ্ধতিতে বা এলসেথ্রো (সরবরাহকারী <? এক্স> প্রসারিত)" টি আর্গুমেন্টের জন্য প্রযোজ্য নয় (() -> {}) "
— বিডিজেইনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.