Java Optional হলো Java 8-এ প্রবর্তিত একটি ক্লাস যা একটি null মানের সমস্যা সমাধানে সাহায্য করে। এটি মূলত null মানের বিরুদ্ধে সুরক্ষা প্রদান করে, যাতে আপনি null pointer exceptions (NPE) থেকে বাঁচতে পারেন। Optional একটি container object, যা optional values ধারণ করে এবং আপনাকে null চেক করার পরিবর্তে একটি পরিষ্কার এবং সুসংগঠিত উপায় প্রদান করে।
Optional এর মধ্যে তিনটি সাধারণভাবে ব্যবহৃত মেথড হলো orElse(), orElseGet(), এবং orElseThrow()। এই মেথডগুলো Optional অবজেক্টের মান বের করতে ব্যবহৃত হয়, এবং যদি মান না থাকে (যদি Optional-এ কোনো ভ্যালু না থাকে), তখন একটি ডিফল্ট ভ্যালু প্রদান বা কিছু এক্সেপশন থ্রো করতে পারে।
1. orElse() মেথড
orElse() মেথডটি ব্যবহার করা হয় যদি Optional অবজেক্টে কোনো মান না থাকে (যদি Optional-এর ভ্যালু null হয়), তাহলে এটি একটি ডিফল্ট ভ্যালু রিটার্ন করে।
সিনট্যাক্স:
T orElse(T other);
- other: যদি
Optionalঅবজেক্টে মান না থাকে, তবে এটিotherভ্যালু রিটার্ন করবে।
উদাহরণ:
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> optionalValue = Optional.ofNullable(null);
// Using orElse() to provide a default value
String result = optionalValue.orElse("Default Value");
System.out.println(result); // Output: Default Value
}
}
এখানে, optionalValue হল একটি Optional অবজেক্ট যা null ধারণ করে, তাই orElse() মেথডটি "Default Value" রিটার্ন করে।
2. orElseGet() মেথড
orElseGet() মেথডটি orElse() এর মতোই কাজ করে, কিন্তু এখানে আপনি একটি Supplier (এটি একটি ফাংশনাল ইন্টারফেস) পাস করতে পারেন, যা একটি মান সরবরাহ করবে। যখন Optional অবজেক্টে মান না থাকে, তখন এটি Supplier থেকে পাওয়া মান রিটার্ন করবে।
সিনট্যাক্স:
T orElseGet(Supplier<? extends T> other);
- other: এটি একটি
Supplierফাংশনাল ইন্টারফেস যা যখনOptionalঅবজেক্টে মান না থাকে, তখন একটি মান সরবরাহ করবে।
উদাহরণ:
import java.util.Optional;
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
Optional<String> optionalValue = Optional.ofNullable(null);
// Using orElseGet() with a Supplier
Supplier<String> defaultSupplier = () -> "Supplied Default Value";
String result = optionalValue.orElseGet(defaultSupplier);
System.out.println(result); // Output: Supplied Default Value
}
}
এখানে, optionalValue আবার null ধারণ করছে, তাই orElseGet() মেথডটি defaultSupplier থেকে মান সরবরাহ করে "Supplied Default Value" রিটার্ন করে।
3. orElseThrow() মেথড
orElseThrow() মেথডটি ব্যবহার করা হয় যখন আপনি চান যে যদি Optional অবজেক্টে মান না থাকে, তবে একটি এক্সেপশন থ্রো করা হোক। এটি একটি এক্সেপশন রিটার্ন করে যখন Optional এর মধ্যে কোনো মান না থাকে।
সিনট্যাক্স:
T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X;
- exceptionSupplier: একটি
Supplierযা একটি এক্সেপশন সরবরাহ করবে যদিOptionalঅবজেক্টে কোনো মান না থাকে।
উদাহরণ:
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> optionalValue = Optional.ofNullable(null);
// Using orElseThrow() to throw an exception if no value present
try {
String result = optionalValue.orElseThrow(() -> new IllegalArgumentException("No value present"));
System.out.println(result);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage()); // Output: No value present
}
}
}
এখানে, optionalValue আবার null, তাই orElseThrow() একটি IllegalArgumentException থ্রো করবে।
orElse(), orElseGet(), এবং orElseThrow() এর মধ্যে পার্থক্য:
| Method | Description | When to Use |
|---|---|---|
| orElse() | যদি Optional এর মধ্যে মান না থাকে, তখন একটি ডিফল্ট মান রিটার্ন করে। | যখন আপনি নিশ্চিত নন যে Optional-এ মান থাকবে কি না এবং একটি ডিফল্ট ভ্যালু প্রদান করতে চান। |
| orElseGet() | যদি Optional এর মধ্যে মান না থাকে, তখন একটি Supplier থেকে মান রিটার্ন করে। | যখন আপনি একটি কার্যকরী (lazy) ডিফল্ট মান পেতে চান যা শুধুমাত্র তখন উৎপন্ন হবে যখন Optional খালি থাকবে। |
| orElseThrow() | যদি Optional এর মধ্যে মান না থাকে, একটি নির্দিষ্ট এক্সেপশন থ্রো করে। | যখন আপনি চান যে, যদি Optional খালি থাকে, তবে একটি এক্সেপশন থ্রো করা হোক। |
সংক্ষেপে:
orElse(): যখনOptionalঅবজেক্ট খালি থাকে, তখন একটি ডিফল্ট মান প্রদান করে।orElseGet(): যখনOptionalঅবজেক্ট খালি থাকে, তখন একটিSupplierথেকে মান সরবরাহ করে (lazy evaluation)।orElseThrow(): যখনOptionalঅবজেক্ট খালি থাকে, তখন একটি নির্দিষ্ট এক্সেপশন থ্রো করে।
এই তিনটি মেথড Optional ক্লাসের সুবিধাকে কাজে লাগিয়ে আপনাকে null সিকিউরিটি নিশ্চিত করতে এবং null pointer exceptions (NPE) এড়াতে সাহায্য করে।
Read more