জাভা 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.