প্রযুক্তিগতভাবে বলতে গেলে, জেনেরিকগুলি ব্যবহার করার সময় জাভাতে টাইপ ইনফারেন্সিং থাকে । একটি জেনেরিক পদ্ধতি মত
public <T> T foo(T t) {
return t;
}
সংকলক বিশ্লেষণ করবে এবং বুঝতে পারবে যে আপনি যখন লিখবেন
// String
foo("bar");
// Integer
foo(new Integer(42));
আর্গুমেন্ট হিসাবে ইনপুট কী ছিল তার ভিত্তিতে প্রথম কলের জন্য একটি স্ট্রিং এবং দ্বিতীয় কলটির জন্য একটি পূর্ণসংখ্যা ফেরত দেওয়া হচ্ছে। ফলস্বরূপ আপনি সঠিক সংকলন-সময় চেকিং পাবেন। অতিরিক্তভাবে, জাভা 7-তে, জেনারিকগুলি ইনস্ট্যান্ট করার সময় কেউ কিছু অতিরিক্ত ধরণের ইনফারেন্সিং পেতে পারে
Map<String, String> foo = new HashMap<>();
জাভা আমাদের জন্য ফাঁকা কোণ বন্ধনী পূরণ করার জন্য যথেষ্ট সদয়। এখন কেন জাভা ভেরিয়েবল অ্যাসাইনমেন্টের অংশ হিসাবে ইনফারেন্সিং টাইপ করে না ? এক পর্যায়ে ভেরিয়েবল ঘোষণায় টাইপ ইনফারেন্সিংয়ের জন্য একটি আরএফই ছিল , তবে এটি "ঠিক করবে না" বলে বন্ধ করা হয়েছিল কারণ
টাইপ ডিক্লেয়ারেশনকে দু'ভাবে উপকারের ফলে মানুষ উপকৃত হয়। প্রথমত, রিডানড্যান্ট টাইপটি মূল্যবান ডকুমেন্টেশন হিসাবে কাজ করে - পাঠকরা কী ধরনের ফিরে আসে তা খুঁজে পাওয়ার জন্য getMap () ঘোষণার জন্য অনুসন্ধান করতে হবে না। দ্বিতীয়ত, অপ্রয়োজনীয়তা প্রোগ্রামারকে পছন্দসই প্রকারটি ঘোষণা করতে দেয় এবং এর সাহায্যে সংকলক দ্বারা সম্পাদিত ক্রস চেক থেকে উপকৃত হয়।
যে অবদানকারী এটি বন্ধ করেছিল তারা আরও উল্লেখ করেছে যে এটি কেবল "আন-জাভা-জাতীয়" বোধ করে, যার সাথে আমি একমত হই। জাভার ভার্বোসটি একটি আশীর্বাদ এবং অভিশাপ উভয়ই হতে পারে, তবে এটি ভাষাটি কী তা তৈরি করে।
অবশ্যই সেই বিশেষ আরএফই সেই কথোপকথনের শেষ ছিল না। জাভা During-এর সময়, এই বৈশিষ্ট্যটি আবার বিবেচনা করা হয়েছিল , কিছু পরীক্ষা বাস্তবায়ন তৈরি হয়েছিল, যার মধ্যে একটি স্বয়ং জেমস গোসলিংও করেছিলেন। আবার, এই বৈশিষ্ট্যটি শেষ পর্যন্ত নিচে নামিয়ে দেওয়া হয়েছিল।
জাভা 8 প্রকাশের সাথে সাথে, আমরা এখন ল্যাম্বডাসের অংশ হিসাবে টাইপ অনুকরণটি পাই:
List<String> names = Arrays.asList("Tom", "Dick", "Harry");
Collections.sort(names, (first, second) -> first.compareTo(second));
জাভা সংকলক পদ্ধতিটি দেখতে Collections#sort(List<T>, Comparator<? super T>)
এবং তারপরে ইন্টারফেসটি দেখতে Comparator#compare(T o1, T o2)
এবং এটি নির্ধারণ করতে সক্ষম হয় first
এবং এটি second
এমনভাবে হওয়া উচিত String
যাতে ল্যাম্বডা এক্সপ্রেশনটিতে টাইপটি পুনরায় চালু করতে প্রোগ্রামারটিকে যেতে দেওয়া হয়।