আমি এটি একটি সহজ পদ্ধতিতে ব্যাখ্যা করব।
ক্লাস স্তরে সংজ্ঞায়িত জেনারিকস (স্ট্যাটিক) পদ্ধতি স্তরে সংজ্ঞায়িত জেনেরিক থেকে সম্পূর্ণ পৃথক।
class Greet<T> {
public static <T> void sayHello(T obj) {
System.out.println("Hello " + obj);
}
}
আপনি যখন কোথাও উপরের কোডটি দেখতে পাচ্ছেন, দয়া করে নোট করুন যে শ্রেণি পর্যায়ে সংজ্ঞায়িত টিটির স্থির পদ্ধতিতে সংজ্ঞায়িত টি এর সাথে কোনও সম্পর্ক নেই। নিম্নলিখিত কোডটিও সম্পূর্ণ বৈধ এবং উপরের কোডের সমতুল্য।
class Greet<T> {
public static <E> void sayHello(E obj) {
System.out.println("Hello " + obj);
}
}
স্থির পদ্ধতিটির নিজস্ব জেনেরিকগুলি ক্লাসের থেকে আলাদা হওয়া দরকার কেন?
এটি কারণ, ক্লাসটিকে তাত্ক্ষণিক না করে স্থিত পদ্ধতি বলা যেতে পারে। সুতরাং যদি ক্লাসটি এখনও তাত্ক্ষণিকভাবে চালু না করা হয় তবে আমরা এখনও টি টি কী তা জানি না This এ কারণেই স্থির পদ্ধতিগুলির নিজস্ব জেনেরিক হওয়া দরকার।
সুতরাং, আপনি যখনই স্থির পদ্ধতি কল করছেন,
Greet.sayHello("Bob");
Greet.sayHello(123);
জেভিএম নিম্নলিখিত হিসাবে এটি ব্যাখ্যা করে।
Greet.<String>sayHello("Bob");
Greet.<Integer>sayHello(123);
উভয় একই আউটপুট দেয়।
Hello Bob
Hello 123