ঢালাই হয় টেকনিক্যালি সম্ভব। এটি জাভা দ্বারা সহজে প্রমাণিত হতে পারে না যে এটি আপনার ক্ষেত্রে এটি নয় এবং জেএলএস প্রকৃতপক্ষে এটি একটি বৈধ জাভা প্রোগ্রাম হিসাবে সংজ্ঞায়িত করেছে, সুতরাং একটি ত্রুটি চিহ্নিত করা ভুল হবে।
এটি কারণ List
একটি ইন্টারফেস। সুতরাং আপনার এখানে একটি সাবক্লাস থাকতে পারে Date
যা বাস্তব List
হিসাবে List
এখানে ছদ্মবেশ প্রয়োগ করে - এবং তারপরে একে একে Date
একে পুরোপুরি ঠিক আছে। উদাহরণ স্বরূপ:
public class SneakyListDate extends Date implements List<Foo> {
...
}
এবং তারপর:
List<Foo> list = new SneakyListDate();
Date date = (Date) list; // This one is valid, compiles and runs just fine
এই জাতীয় পরিস্থিতি সনাক্ত করা সর্বদা সম্ভব নাও হতে পারে, কারণ এটির জন্য রানটাইম তথ্য প্রয়োজন যদি উদাহরণস্বরূপ আসে, উদাহরণস্বরূপ, পরিবর্তে কোনও পদ্ধতি। এবং এমনকি যদি, এটি সংকলকটির জন্য আরও অনেক প্রচেষ্টা প্রয়োজন। সংকলকটি কেবলমাত্র সেই কাস্টগুলিকে বাধা দেয় যা শ্রেণি-বৃক্ষের একেবারে মিলার কোনও উপায় না থাকায় একেবারে অসম্ভব। এখানে যেমন দেখা যায় না, তেমন দেখা যায়।
নোট করুন যে JLS আপনার কোডটি একটি বৈধ জাভা প্রোগ্রাম হতে হবে। ইন 5.1.6.1। অনুমোদিত সংকেত রেফারেন্স রূপান্তর এটিতে বলেছে:
একটি কমিয়ে আনায় রেফারেন্স রূপান্তর রেফারেন্স ধরণ থেকে বিদ্যমান S
রেফারেন্স টাইপ T
যদি সব নিম্নলিখিত হয় সত্য :
- [...]
- এক নিম্নলিখিত ক্ষেত্রে প্রযোজ্য :
- [...]
S
একটি ইন্টারফেস টাইপ, T
একটি শ্রেণির ধরণ, এবং T
একটি final
শ্রেণীর নাম দেয় না ।
তাই এমনকি যদি কম্পাইলার পারে জিনিসটা যে আপনার ক্ষেত্রে আসলে provably অসম্ভব, এটা পতাকা একটি ত্রুটি মঞ্জুরিপ্রাপ্ত নয় কারণ JLS বৈধ জাভা প্রোগ্রাম যেমন সংজ্ঞায়িত করা হয়।
এটি কেবলমাত্র একটি সতর্কতা দেখানোর অনুমতি দেওয়া হবে।
List
এখানে বিশেষ কিছুই ।Date d = (Date) new Object();