Java 8-এ Method References একটি নতুন বৈশিষ্ট্য যা ল্যাম্বডা এক্সপ্রেশনকে আরও সোজা এবং পাঠযোগ্য করে তোলে। এটি মূলত ল্যাম্বডা এক্সপ্রেশনকে সংক্ষিপ্তভাবে প্রকাশ করার একটি উপায়। মেথড রেফারেন্স ব্যবহার করে আপনি সরাসরি কোনো মেথডকে রেফারেন্স করতে পারেন, যা ল্যাম্বডা এক্সপ্রেশন ব্যবহার করার চেয়ে আরও পরিষ্কার এবং সহজ।
Method Reference-এর তিনটি প্রধান ধরনের সিনট্যাক্স রয়েছে:
- স্ট্যাটিক মেথড রেফারেন্স:
ClassName::methodName - অবজেক্ট মেথড রেফারেন্স:
instance::methodName - কনস্ট্রাক্টর রেফারেন্স:
ClassName::new
এখানে আমরা বিভিন্ন ধরনের মেথড রেফারেন্সের উদাহরণ দেখবো।
১. স্ট্যাটিক মেথড রেফারেন্স
ধরা যাক, আমাদের একটি স্ট্যাটিক মেথড আছে যা দুটি পূর্ণসংখ্যা যোগফল নির্ণয় করে। ল্যাম্বডা এক্সপ্রেশন ব্যবহার করার পরিবর্তে, আমরা মেথড রেফারেন্স ব্যবহার করতে পারি।
উদাহরণ:
public class Main {
// স্ট্যাটিক মেথড
public static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
// ল্যাম্বডা এক্সপ্রেশন
MathOperation addition = (a, b) -> add(a, b);
System.out.println("Sum using Lambda: " + addition.operate(5, 3));
// মেথড রেফারেন্স
MathOperation addRef = Main::add;
System.out.println("Sum using Method Reference: " + addRef.operate(5, 3));
}
}
@FunctionalInterface
interface MathOperation {
int operate(int a, int b);
}এখানে Main::add মেথড রেফারেন্স ব্যবহার করে আমরা add মেথডকে সরাসরি রেফারেন্স করেছি, যা ল্যাম্বডা এক্সপ্রেশন (a, b) -> add(a, b) এর সমতুল্য।
২. অবজেক্ট মেথড রেফারেন্স
ধরা যাক, আমাদের একটি ক্লাসে একটি সাধারণ মেথড আছে, এবং আমরা এটি কোনো অবজেক্টের মাধ্যমে কল করতে চাই। মেথড রেফারেন্স ব্যবহার করে অবজেক্ট মেথডও কল করা যেতে পারে।
উদাহরণ:
public class Printer {
public void printMessage(String message) {
System.out.println(message);
}
public static void main(String[] args) {
Printer printer = new Printer();
// ল্যাম্বডা এক্সপ্রেশন
MessagePrinter messagePrinterLambda = message -> printer.printMessage(message);
messagePrinterLambda.print("Hello using Lambda");
// মেথড রেফারেন্স
MessagePrinter messagePrinterRef = printer::printMessage;
messagePrinterRef.print("Hello using Method Reference");
}
}
@FunctionalInterface
interface MessagePrinter {
void print(String message);
}এখানে printer::printMessage হল অবজেক্ট মেথড রেফারেন্স যা printer অবজেক্টের printMessage মেথডকে রেফারেন্স করে।
৩. কনস্ট্রাক্টর রেফারেন্স
কনস্ট্রাক্টর রেফারেন্স ব্যবহার করে আমরা একটি নতুন অবজেক্ট তৈরি করতে পারি। এটি একটি কনস্ট্রাকটরের মাধ্যমে নতুন ইনস্ট্যান্স তৈরি করে।
উদাহরণ:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void greet() {
System.out.println("Hello, " + name);
}
public static void main(String[] args) {
// কনস্ট্রাক্টর রেফারেন্স
PersonCreator creator = Person::new;
// নতুন Person অবজেক্ট তৈরি
Person person = creator.create("John");
person.greet(); // Output: Hello, John
}
}
@FunctionalInterface
interface PersonCreator {
Person create(String name);
}এখানে Person::new কনস্ট্রাক্টর রেফারেন্স ব্যবহার করে Person ক্লাসের একটি নতুন অবজেক্ট তৈরি করা হয়েছে।
৪. মেথড রেফারেন্স এবং স্ট্রিম API
Method references স্ট্রিম API-র সাথে খুবই জনপ্রিয়। নিচে একটি উদাহরণ দেওয়া হলো যেখানে আমরা স্ট্রিম ব্যবহার করে একটি তালিকা থেকে এমন নামগুলো বের করেছি যেগুলো "J" অক্ষর দিয়ে শুরু হয়।
উদাহরণ:
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("John", "Jane", "Mike", "Mia");
// মেথড রেফারেন্স ব্যবহার
names.stream()
.filter(Main::startsWithJ)
.forEach(System.out::println); // Output: John, Jane
}
public static boolean startsWithJ(String name) {
return name.startsWith("J");
}
}এখানে, Main::startsWithJ মেথড রেফারেন্স ব্যবহার করে আমরা startsWithJ মেথডটি filter অপারেশনের জন্য রেফারেন্স করেছি, এবং System.out::println মেথড রেফারেন্স ব্যবহার করে প্রতিটি নাম প্রিন্ট করেছি।
সারসংক্ষেপ
Method References Java 8-এ একটি শক্তিশালী বৈশিষ্ট্য যা ল্যাম্বডা এক্সপ্রেশনের চেয়ে কোডকে আরও পরিষ্কার এবং সহজ করে তোলে। এটি আপনাকে কোনো মেথডের নাম সরাসরি রেফারেন্স করার সুযোগ দেয়, এবং আপনি বিভিন্ন ধরনের মেথড রেফারেন্স (স্ট্যাটিক মেথড, অবজেক্ট মেথড, কনস্ট্রাক্টর রেফারেন্স) ব্যবহার করে কোডের কার্যকারিতা বাড়াতে পারেন। স্ট্রিম API-তে মেথড রেফারেন্সের ব্যবহার কোডকে আরও সুন্দর এবং কার্যকরী করে তোলে।
Read more