কোটলিন জেনেরিকগুলিতে "*" এবং "যে কোনও" এর মধ্যে পার্থক্য


106

আমি নিশ্চিত নই যে আমি SomeGeneric<*>এবং এর মধ্যে পার্থক্যটি পুরোপুরি বুঝতে পেরেছি SomeGeneric<Any>। আমি মনে করি যে *কোনও কিছু (ওয়াইল্ড কার্ড) Anyউপস্থাপন করে এবং সেই বস্তুর প্রতিনিধিত্ব করে যা থেকে সমস্ত বস্তু উত্তরাধিকার সূত্রে প্রাপ্ত। সুতরাং মনে হচ্ছে তাদের একই হওয়া উচিত, তবে তারা কি?

উত্তর:


158

কেবলমাত্র কোনও প্রকার নয়, নির্দিষ্ট কিছু প্রকার যা আপনি ঠিক কী জানেন না তা উপস্থাপনের উপায় হিসাবে তারকা প্রক্ষেপণটিকে ভাবতে সহায়ক হতে পারে ।

উদাহরণস্বরূপ, যদি আপনি MutableList<*>একটি তালিকা উপস্থাপন করে কিছু (আপনি জানেন না ঠিক কি)। সুতরাং আপনি যদি এই তালিকায় কিছু যুক্ত করার চেষ্টা করেন তবে আপনি সফল হবেন না। এটি Strings এর একটি তালিকা Int, বা s এর একটি তালিকা বা অন্য কোনও কিছুর তালিকা হতে পারে। সংকলকটি এই তালিকায় কোনও বস্তু রাখার অনুমতি দেয় না কারণ এটি যাচাই করতে পারে না যে তালিকাটি এই ধরণের বস্তু গ্রহণ করে। তবে, আপনি যদি এই জাতীয় তালিকা থেকে কোনও উপাদান বের করার চেষ্টা করেন তবে অবশ্যই আপনি কোনও ধরণের অবজেক্ট পাবেন Any?কারণ কোটলিনের সমস্ত বস্তু উত্তরাধিকার সূত্রে পেয়েছে Any

নীচে asco মন্তব্য থেকে :

অতিরিক্তভাবে List<*>যে কোনও ধরণের অবজেক্টগুলি থাকতে পারে তবে কেবলমাত্র এই ধরণের, তাই এতে স্ট্রিংস (তবে কেবল স্ট্রিংস) List<Any> থাকতে পারে , তবে স্ট্রিংস এবং ইন্টিজারগুলি এবং একই তালিকাতে সমস্ত কী থাকতে পারে তা ধারণ করতে পারে।


83
উত্তম উত্তর, কারও জন্য এটি যুক্ত করা সহায়ক হতে পারে যে তালিকা <*> যে কোনও ধরণের অবজেক্টগুলিকে ধারণ করতে পারে তবে কেবলমাত্র সেই ধরণের থাকে, সুতরাং এতে স্ট্রিংস (তবে কেবল স্ট্রিংস) থাকতে পারে, তবে তালিকা << কোনও> স্ট্রিং এবং পূর্ণসংখ্যা এবং কি না, সমস্ত একই তালিকায়।
fweigl

1
এখানে অনুরূপ ব্যাখ্যা সহ একটি আকর্ষণীয় নিবন্ধ: টাইপালিয়াস.com
croc

28

প্রসঙ্গে আমি আপনাকে বোঝায় বলে মনে করি, SomeGeneric<*>এর সমতুল্য SomeGeneric<out Any?>। জাভা সমতুল্য SomeGeneric<? extends Object>

সিনট্যাক্সটিকে বলা হয় "তারা-প্রজেকশনস"। এখানে অফিসিয়াল ডক্স রয়েছে: https://kotlinlang.org/docs/references/generics.html# স্টার- প্রকল্পগুলি

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