CharSequence
= ইন্টারফেস
String
= কংক্রিট বাস্তবায়ন
তুমি বলেছিলে:
এক থেকে অন্য রূপান্তর
থেকে কোন রূপান্তর হয় না String
।
- প্রতিটি
String
বস্তুর হয় একটি CharSequence
।
- প্রতিটি
CharSequence
একটি উত্পাদন করতে পারেন String
। কল করুন CharSequence::toString
। যদি CharSequence
ঘটনাটি একটি হয়ে থাকে String
, তবে পদ্ধতিটি তার নিজস্ব অবজেক্টের একটি রেফারেন্স দেয়।
অন্য কথায়, প্রত্যেকটি String
একটি CharSequence
, তবে প্রত্যেকটি CharSequence
এক নয় String
।
একটি ইন্টারফেস প্রোগ্রামিং
অ্যান্ড্রয়েডে প্রোগ্রামিং, বেশিরভাগ পাঠ্য মান চারসেকেন্সে প্রত্যাশিত।
কেন এমন? সুবিধা কী এবং স্ট্রিং ওভার চারসিকোয়েন্স ব্যবহারের প্রধান প্রভাবগুলি কী?
সাধারণত, ইন্টারফেসে প্রোগ্রামিং করা কংক্রিটের ক্লাসে প্রোগ্রামিংয়ের চেয়ে ভাল। এটি নমনীয়তা দেয়, সুতরাং আমরা অন্যান্য কোড ভঙ্গ না করে একটি নির্দিষ্ট ইন্টারফেসের কংক্রিট বাস্তবায়নের মধ্যে স্যুইচ করতে পারি।
বিভিন্ন পরিস্থিতিতে বিভিন্ন প্রোগ্রামারদের দ্বারা ব্যবহৃত একটি এপিআই বিকাশ করার সময়, সর্বাধিক সাধারণ ইন্টারফেসগুলি দিতে এবং গ্রহণের জন্য আপনার কোডটি লিখুন। এটি কলিং প্রোগ্রামারকে সেই ইন্টারফেসের বিভিন্ন বাস্তবায়ন ব্যবহার করার স্বাধীনতা দেয়, যার যে কোনও বাস্তবায়নই তাদের নির্দিষ্ট প্রসঙ্গে উপযুক্ত।
উদাহরণস্বরূপ, জাভা সংগ্রহ ফ্রেমওয়ার্কটি দেখুন । আপনার এপিআই দেয় বা বস্তু আদেশ সংগ্রহে নেয়, যেমন ব্যবহার করে আপনার পদ্ধতি ঘোষণা List
বদলে ArrayList
, LinkedList
অথবা অন্য কোন 3rd পার্টি বাস্তবায়ন List
।
আপনার কোড দ্বারা কেবলমাত্র নির্দিষ্ট জায়গায় ব্যবহার করার জন্য দ্রুত এবং নোংরা সামান্য পদ্ধতি লেখার সময়, একাধিক জায়গায় ব্যবহার করার জন্য একটি এপিআই লেখার বিপরীতে, নির্দিষ্ট কংক্রিটের পরিবর্তে আপনাকে আরও সাধারণ ইন্টারফেস ব্যবহার করে বিরক্ত করার প্রয়োজন নেই you বর্গ। তবুও এটি আপনার পক্ষে সবচেয়ে সাধারণ ইন্টারফেস ব্যবহার করতে ক্ষতি করে।
মূল পার্থক্যগুলি কী এবং কী কী সমস্যা প্রত্যাশিত তা ব্যবহার করার সময়,
- একটির মাধ্যমে
String
আপনি জানেন যে আপনার কাছে একক টুকরো টেক্সট রয়েছে, সম্পূর্ণ স্মৃতিতে এবং স্থাবর।
- একটি সহ
CharSequence
, আপনি জানেন না কংক্রিট বাস্তবায়নের বিশেষ বৈশিষ্ট্যগুলি কী হতে পারে।
CharSequence
বস্তু পাঠ্যের একটি বিরাট খণ্ড উপস্থাপন করা হতে পারে, সেইজন্য এবং মেমরির বিষয় রয়েছে। অথবা অনেকগুলি পাঠ্য পৃথকভাবে ট্র্যাক করা হতে পারে যা আপনি কল করার সময় এক সাথে সেলাই করা প্রয়োজন toString
এবং এর ফলে কার্য সম্পাদনের সমস্যা রয়েছে। বাস্তবায়ন এমনকি একটি দূরবর্তী পরিষেবা থেকে পাঠ্য পুনরুদ্ধার করা হতে পারে, এবং অতএব বিলম্বিত প্রভাব আছে।
এবং এক থেকে অন্য রূপান্তর?
আপনি সাধারণত এবং পিছনে রূপান্তর করা হবে না। ক String
হয় ক CharSequence
। আপনার পদ্ধতি ঘোষণা করে যে এটি একটি নেয় CharSequence
, কলিং প্রোগ্রামার একটি পাস হতে পারে String
বস্তু, বা যেমন অন্য কিছু যেমন পাস হতে পারে StringBuffer
বা StringBuilder
। আপনার পদ্ধতির কোডটি যে কোনও CharSequence
পদ্ধতিতে কল করে যা যা হয়েছে তা কেবল ব্যবহার করবে ।
আপনি রূপান্তর করতে নিকটতমতমটি হ'ল যদি আপনার কোডটি একটি গ্রহণ করে CharSequence
এবং আপনি যদি জানেন যে আপনার প্রয়োজন String
। সম্ভবত আপনার ইন্টারফেসে String
রচনার পরিবর্তে ক্লাসে লিখিত পুরানো কোড দিয়ে CharSequence
ইন্টারফেস করছে। অথবা সম্ভবত আপনার কোডটি বার বার লুপ করা বা অন্যথায় বিশ্লেষণের মতো পাঠ্যের সাথে নিবিড়ভাবে কাজ করবে। সেক্ষেত্রে আপনি যে কোনও সম্ভাব্য পারফরম্যান্স হিট একবারে নিতে চান, তাই আপনি toString
সামনে কল করুন । তারপরে আপনি পুরোপুরি মেমরিতে একক টুকরো টেক্সট হতে যা জানেন তা ব্যবহার করে আপনার কাজটি এগিয়ে যান।
বাঁকানো ইতিহাস
গৃহীত উত্তরের বিষয়ে করা মন্তব্যগুলি নোট করুন । CharSequence
ইন্টারফেস বিদ্যমান শ্রেণী কাঠামো সম্মুখের retrofitted করা হয়েছে, তাই সেখানে কিছু গুরুত্বপূর্ণ সুক্ষ্ণ বিষয়গুলো (হয় equals()
& hashCode()
)। জাভা বিভিন্ন সংস্করণ (1, 2, 4 এবং 5) লক্ষ করুন ক্লাস / ইন্টারফেসে ট্যাগ করা - বেশ কয়েক বছর ধরে মন্থন করা। আদর্শভাবে CharSequence
শুরু থেকেই জায়গাটিতে থাকত তবে জীবন এমনই।
নীচের আমার শ্রেণীর চিত্রটি আপনাকে জাভা 7/8 এ স্ট্রিংয়ের ধরণের বড় চিত্র দেখতে সহায়তা করতে পারে। এগুলি সব অ্যান্ড্রয়েডে উপস্থিত কিনা আমি নিশ্চিত নই, তবে সামগ্রিক প্রসঙ্গটি এখনও আপনার পক্ষে কার্যকর প্রমাণিত হতে পারে।