কোটলিনে অ্যারেলিস্ট <স্ট্রিং> () এবং মিটেবল লিস্টঅফ <স্ট্রিং> () এর মধ্যে পার্থক্য


102
private val repositories = mutableListOf<String>()

private val repositories = ArrayList<String>()

উভয়ই পরিবর্তনীয় তালিকা, তবে দুটি কীওয়ার্ডের বিন্দু কী mutableListOfবা ArrayList?

বা কোন বড় পার্থক্য আছে?


6
কোটলিনেও mutableListOfনয় ArrayListকিওয়ার্ডগুলিও রয়েছে
ইলিয়া

উত্তর:


143

দুজনের মধ্যে কেবলমাত্র তফাতটি আপনার অভিপ্রায়টি যোগাযোগ করা।

আপনি যখন লিখবেন val a = mutableListOf(), আপনি বলছেন "আমি একটি পরিবর্তনীয় তালিকা চাই, এবং আমি বিশেষত প্রয়োগের বিষয়ে যত্ন করি না"। পরিবর্তে আপনি যখন লেখেন, val a = ArrayList()আপনি বলছেন "আমি বিশেষত একটি চাই ArrayList"।

বাস্তবে, জেভিএমকে সংকলিত কোটলিনের বর্তমান বাস্তবায়নে কলিং mutableListOfএকটি উত্পন্ন করবে ArrayList, এবং আচরণের মধ্যে কোনও পার্থক্য নেই: একবার তালিকা তৈরি হয়ে গেলে, সমস্ত কিছু একই রকম আচরণ করবে।

এখন, আসুন আমরা বলি যে কোটলিনের ভবিষ্যতের সংস্করণটি mutableListOfবিভিন্ন ধরণের তালিকায় ফিরে আসে।

না এর চেয়ে পছন্দসই, কোটলিন টিম কেবল তখনই সেই পরিবর্তন করতে পারে যখন তারা দেখায় যে নতুন বাস্তবায়ন বেশিরভাগ ব্যবহারের ক্ষেত্রে আরও ভাল কাজ করে। mutableListOfতাহলে আপনি কী সেই নতুন তালিকার প্রয়োগটি স্বচ্ছভাবে ব্যবহার করতে পারবেন এবং আপনি নিখরচায় আরও ভাল আচরণটি পেতে পারেন? mutableListOfযদি আপনার কেসের মতো মনে হয় তবে সাথে যান ।

অন্যদিকে, সম্ভবত আপনি আপনার সমস্যা সম্পর্কে চিন্তাভাবনা করে বেশ কিছুটা সময় ব্যয় করেছেন এবং বুঝতে পেরেছেন যে এটি আপনার সমস্যার জন্য ArrayList সত্যিই সেরা উপযুক্ত এবং আপনি কোনও উপ-অনুকূল কিছুতে যাওয়ার ঝুঁকি নিতে চান না। তারপরে আপনি সম্ভবত ArrayListসরাসরি ব্যবহার করতে চান বা arrayListOfকারখানার ফাংশনটি ব্যবহার করতে চান (একটি নির্দিষ্ট ArrayListএনালগ mutableListOf) ue


21

mutableListOf<T>()একটি ইনলাইন ফাংশন প্রার্থনা যা প্রত্যাবর্তন করে MutableList<T>। আজকের হিসাবে, mutableListOfএকটি উদাহরণ ফিরে আসে ArrayList

ArrayList<String>() এটি একটি নির্মাণকারীর প্রার্থনা এবং ইনলাইন করা যায় না।

অন্য কথায়, প্রদত্ত:

 val a = mutableListOf<String>()
 val b = ArrayList<String>()
  • a টাইপ হয় MutableList<String>
  • b টাইপ হয় ArrayList<String>

রানটাইম এ, উভয় aএবং এর bউদাহরণ রাখে ArrayList

লক্ষ্য করুন ইনলাইনিং যখন সঙ্গে মিলিত বিশেষ করে দরকারী টাইপ reification , যার অস্তিত্ব যথার্থ listOf, mutableListOfকথা বলা ইত্যাদি।


4
সুতরাং কোন পার্থক্য নেই।
সাঁই

4
aএবং bআলাদাভাবে ঘোষিত প্রকার রয়েছে - তাই সংকলনের সময় একটি পার্থক্য রয়েছে।
মিনসোল

এটি ইনলাইন করা যেতে পারেval b = arrayListOf<String>()
ভ্লাদ

8

আপনি সূত্রে দেখতে পারেন :

public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()

সুতরাং, কোনও পার্থক্য নেই, কেবল একটি সুবিধা পদ্ধতি।


4
এবং আমি উদ্ধৃতিতে "সুবিধা" রাখব। মিউটেবললিস্টের আসলে আলাদা আলাদা বাস্তবায়ন না হওয়া অবধি , একটি মূল অবজেক্ট সরবরাহ করে যা অন্য মূল বস্তুর মতো একই কাজ করে এবং বিভ্রান্তিকর, কোনও সুবিধা নয় not :(
মাইক উইলিয়ামসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.