জাভা জেনেরিকগুলি কেন অ্যারে থাকতে পারে না?


10

কেন যখন আমি অ্যারেলিস্টগুলির একটি অ্যারে করার চেষ্টা করি: ArrayList<Integer>[] arr=new ArrayList<Integer>[40];ত্রুটি আছে এবং জাভা এটির অনুমতি দেয় না?

জাভা জেনেরিক প্রয়োগ, কোনও ভাষায় জেনারিকস বা যথেচ্ছ কিছু প্রয়োগের সাথে সম্পর্কিত কি কারণ আছে?


উত্তর:


20

এই জাভার জেনেরিক্স প্রধান গর্ত এক, অ্যারে covariant , যার মানে হল ধরনের একটি অ্যারের Foo[]একটি উপশ্রেণী হয় Object[]এবং ParentOfFoo[]। এর সাথে বৈসাদৃশ্য করুন List<Foo>যার সাথে এই আচরণ নেই।

জাভাতে জেনারিকস ছিল না তখন এটি গুরুত্বপূর্ণ ছিল (জাভা 5 অবধি) কারণ অন্যথায়, জেনেরিক বাছাইয়ের ফাংশনের মতো কিছু অসম্ভব ছিল।

তবে এটির এই জটিল সমস্যাটি রয়েছে যা অ্যারিগুলি রান টাইমে কী ধরণের তা জানতে পছন্দ করে । তবে জাভাতে জেনেরিকগুলি মুছে ফেলার উপর ভিত্তি করে। এই দুটি জিনিস মোটেও জাল হয় না এবং এটিই আমরা আমাদের সমস্যাটি পাই।

সুতরাং এর দীর্ঘ এবং সংক্ষিপ্তসারটি হ'ল, জাভা 1-এ, কোভেরিয়েন্ট অ্যারেগুলি আংশিকভাবে গর্তটি পূরণ করেছে যা জেনেরিকের অভাব তৈরি করেছে। তবে যখন তারা এই গর্তটি সঠিকভাবে পূরণ করার চেষ্টা করেছিলেন, পিছনের সামঞ্জস্যের অর্থ দাঁড়ায় যে অ্যারেগুলি কার্যকর করা অসম্ভব ছিল।

আসলে, যে ছেলেটি আসলে জেনেরিকদের জন্য কাঠামো তৈরি করেছিল, মার্টিন ওডারস্কি, কেন তিনি স্কালা তৈরি করেছিলেন সে সম্পর্কে একটি সাক্ষাত্কারের সময় এখানে এই সম্পর্কে কথা বলেছেন । (আপনি যদি স্কালার ইতিহাসে আদৌ আগ্রহী হন তবে বেশ আকর্ষণীয়)


3

জাভা জেনেরিক প্রয়োগ, কোনও ভাষায় জেনারিকস বা যথেচ্ছ কিছু প্রয়োগের সাথে সম্পর্কিত কি কারণ আছে?

আসলে এটি কিছুটা নির্বিচারে।

সমস্যাটি হ'ল এটি টাইপ সিস্টেমে একটি গর্তের অনুমতি দেয়, যেহেতু ArrayList<T>[]কাস্ট করা যায় Object[]এবং তারপরে আপনি ArrayList<U>অ্যারেটিতে একটি রেখে দিতে পারেন , যেখানে U != T

জাভা ডিজাইনাররা একেবারেই অনুমতি না দিয়ে এই গর্তটিকে যতটা সম্ভব উত্সাহিত করার সিদ্ধান্ত নিয়েছে new ArrayList<T>[N]

তবে জেনেরিকের অ্যারে উপস্থাপনের অনুমতি না দিয়ে এটিও প্লাগ করা যেতে পারে ("চেক না করা" সতর্কতা ছাড়াই)।


এই উত্তর আন্ডাররেটেড হয়। খুব সহজ এবং অস্পষ্ট পদগুলিতে জার্গন ব্যবহার করে না। অনেক ধন্যবাদ.
টুং এনগুইন

আপনি সম্প্রসারিত করতে চাইবেন কেন এই ক্ষেত্রে যেখানে আপনি একটি লাগাতে ভিন্ন Integerএকটি মধ্যে Object[]আসলে একটি যেString[]
Caleth

-3

কারণ অ্যারেটি কোভেরিয়েন্ট যা প্রতিটি প্রকারের অবজেক্টের একটি সাবক্লাস তাই এটি castালাই ব্যতিক্রমের কারণে রান টাইমে একটি ত্রুটি দেয়। যখন জেনেরিক পরিবর্তিত হয় সুতরাং যখনই ধরনের উপর তৈরী করে তা নিশ্চিত বা টাইপ-নিরাপদ তাই যদি টাইপ এটি টাইপ এটি একটি কম্পাইলার এরর দেয় সৃষ্টি মত না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.