কোনও ইমটুটেবল ম্যাপ বা মানচিত্র ফেরত দেওয়া কি ভাল?


90

ধরা যাক আমি এমন একটি পদ্ধতি লিখছি যা মানচিত্রে ফিরে আসবে । এই ক্ষেত্রে:

public Map<String, Integer> foo() {
  return new HashMap<String, Integer>();
}

কিছুক্ষণ চিন্তা করার পরে, আমি সিদ্ধান্ত নিয়েছি যে এই মানচিত্রটি তৈরি হয়ে যাওয়ার পরে এর কোনও কারণ নেই। এইভাবে, আমি একটি ইমটুটেবল ম্যাপটি ফিরিয়ে দিতে চাই ।

public Map<String, Integer> foo() {
  return ImmutableMap.of();
}

আমি কি জেনেরিক মানচিত্র হিসাবে রিটার্নের ধরণটি ছেড়ে যাব বা আমি উল্লেখ করতে হবে যে আমি কোনও ইমটুটেবলম্যাপটি ফিরিয়ে দিচ্ছি?

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


4
আমি সন্দেহ করি যে কেউ এই প্রশ্নটিকে শেষ পর্যন্ত যুক্তিগুলির জন্য খুব খোলামেলা হিসাবে ট্যাগ করবে। আপনি কি "WDYT" এর পরিবর্তে আরও নির্দিষ্ট প্রশ্ন রাখতে পারেন? এবং "ঠিক আছে ...?" উদাহরণস্বরূপ, "নিয়মিত মানচিত্র ফিরিয়ে দেওয়ার বিষয়ে কোনও সমস্যা বা বিবেচনা আছে কি?" এবং "কি বিকল্প বিদ্যমান?"
ছাই

পরে যদি আপনি সিদ্ধান্ত নেন যে এটি আসলে একটি পরিবর্তনীয় মানচিত্রটি ফিরে আসে?
ব্যবহারকারী 253751

4
@ ইমিবিস লোল, নাকি এই বিষয়ে একটি তালিকা?
djechlin

4
আপনি কি সত্যিই আপনার API এ পেয়ারা নির্ভরতা বেক করতে চান? পশ্চাদপদ সামঞ্জস্যতা না ভেঙে আপনি এটি পরিবর্তন করতে পারবেন না।
ব্যবহারকারী 2357112 17-18 এ মনিকা

4
আমি মনে করি যে প্রশ্নটি খুব স্কেচী এবং অনেকগুলি গুরুত্বপূর্ণ বিবরণ অনুপস্থিত। উদাহরণস্বরূপ, আপনার ইতিমধ্যে কোনও উপায়ে (দৃশ্যমান) নির্ভরতা হিসাবে পেয়ারা রয়েছে কিনা। আপনার কাছে ইতিমধ্যে এটি থাকলেও কোড স্নিপেটগুলি পেসুডোকোড এবং আপনি আসলে কী অর্জন করতে চান তা প্রকাশ করবেন না। আপনি অবশ্যই লিখবেন নাreturn ImmutableMap.of(somethingElse) । পরিবর্তে, আপনি ImmutableMap.of(somethingElse)ক্ষেত্র হিসাবে স্টোরটি সঞ্চয় করে কেবল এই ক্ষেত্রটি ফিরে আসতেন । এই সমস্ত এখানে নকশা প্রভাবিত করে।
মার্কো 13

উত্তর:


70
  • আপনি যদি জনসাধারণের মুখোমুখি এপিআই লিখছেন এবং সেই পরিবর্তনটি আপনার ডিজাইনের একটি গুরুত্বপূর্ণ দিক, আমি অবশ্যই পদ্ধতিটির নাম রেখে স্পষ্ট করে বলতে চাই যে প্রত্যাবর্তিত মানচিত্রটি অচল হয়ে যাবে বা কংক্রিটের ধরণের প্রকারটি ফিরে আসার মাধ্যমে মানচিত্র. জাভাডোকে এটি উল্লেখ করা আমার মতে যথেষ্ট নয়।

    যেহেতু আপনি স্পষ্টতই পেয়ারা বাস্তবায়ন ব্যবহার করছেন তাই আমি ডকটির দিকে চেয়েছিলাম এবং এটি একটি বিমূর্ত শ্রেণি যাতে এটি আপনাকে আসল, কংক্রিটের ধরণের উপর কিছুটা নমনীয়তা দেয়।

  • আপনি যদি একটি অভ্যন্তরীণ সরঞ্জাম / লাইব্রেরি লিখছেন তবে এটি কেবল একটি সমতল ফিরে পাওয়া অনেক বেশি গ্রহণযোগ্য হয়ে যায় Map। লোকেরা তাদের যে কোডটি কল করছে তার ইন্টার্নালগুলি সম্পর্কে জানবে বা কমপক্ষে এতে অ্যাক্সেস পাবে।

আমার উপসংহারটি হবে যে স্পষ্টতই ভাল, জিনিসগুলিকে সুযোগে ছেড়ে দেবেন না।


4
একটি অতিরিক্ত ইন্টারফেস, একটি অতিরিক্ত বিমূর্ত শ্রেণি এবং এই বিমূর্ত শ্রেণিকে প্রসারিত এক শ্রেণি। এটি যেমন কোনও সাধারণ বিষয় যেমন ওপি জিজ্ঞাসা করছে তার জন্য খুব ঝামেলা, যা পদ্ধতিটি যদি চিৎকার করে ফেরত Mapইন্টারফেস টাইপ বা ImmutableMapপ্রয়োগের ধরণ।
fps

20
আপনি যদি পেয়ারাটির কথা উল্লেখ করছেন ImmutableMapতবে পেয়ারা দলের পরামর্শটি হ'ল ImmutableMapঅর্থসূচক গ্যারান্টি সহ একটি ইন্টারফেস বিবেচনা করা উচিত এবং আপনার সেই প্রকারটি সরাসরি ফিরে আসা উচিত।
লুই ওয়াসারম্যান

4
@ লুইসওয়াসারম্যান মিমি, প্রশ্নটি পেয়ারা বাস্তবায়নের জন্য একটি লিঙ্ক দিচ্ছে না তা দেখেনি। আমি তখন স্নিপেটটি সরিয়ে ফেলব, আপনাকে ধন্যবাদ
ডিকি

4
আমি লুই এর সাথে একমত, যদি আপনি ইচ্ছা করেন যে কোনও মানচিত্র যা অপ্রচলিত বস্তু হিসাবে ফিরে আসে তবে নিশ্চিত হন যে প্রত্যাবর্তন অবজেক্টটি সেই ধরণের হয় is যদি কোনও কারণে আপনি এটি অপরিবর্তনীয় ধরণের বিষয়টিকে অস্পষ্ট করতে চান তবে আপনার নিজের ইন্টারফেসটি সংজ্ঞায়িত করুন। এটিকে মানচিত্র হিসাবে রেখে দেওয়া বিভ্রান্তিমূলক।
ডাব্লুস্প্পসন

4
@ ডাব্লু সিম্পসন আমি বিশ্বাস করি আমার উত্তর যা বলছে তা তাই। লুই আমার যুক্ত হওয়া স্নিপেটের কথা বলছিল, তবে আমি এটি সরিয়ে দিয়েছি।
Dici

38

ImmutableMapআপনার ফিরতি টাইপ হিসাবে আপনার থাকা উচিত । Mapযে বাস্তবায়ন দ্বারা সমর্থিত নয় পদ্ধতি রয়েছে ImmutableMap(যেমন put) এবং চিহ্নিত হয় @deprecatedমধ্যে ImmutableMap

অবহেলিত পদ্ধতিগুলি ব্যবহারের ফলে একটি সংকলক সতর্কতা তৈরি হবে এবং লোকেরা অবহেলিত পদ্ধতিগুলি ব্যবহার করার চেষ্টা করার সময় বেশিরভাগ আইডিই সতর্ক করবে।

এই অগ্রণী সতর্কতাটি আপনার প্রথম ইঙ্গিত হিসাবে কিছু ভুল হয়েছে বলে রানটাইম ব্যতিক্রমী হওয়া ভাল।


4
এটি আমার মতে সবচেয়ে বুদ্ধিমান উত্তর। মানচিত্র ইন্টারফেসটি একটি চুক্তি, এবং ইমটুটেবল ম্যাপ স্পষ্টভাবে এর একটি গুরুত্বপূর্ণ অংশ লঙ্ঘন করছে। এক্ষেত্রে মানচিত্রকে রিটার্নের ধরণ হিসাবে ব্যবহার করা কোনও অর্থবোধ করে না।
টনিওএলগ্রিঙ্গো

@ টনিওএলগ্রিংগো Collections.immutableMapতখন কি হবে ?
অরেঞ্জডগ

@ টনিওএলগ্রিংগো দয়া করে নোট করুন যে ইমট্যটেবল ম্যাপগুলি প্রয়োগ করে না সেগুলি ইন্টারফেসের ডকুমেন্টেশন ডকসগুলিতে স্পষ্টভাবে racচ্ছিক হিসাবে চিহ্নিত হয়েছে । সুতরাং, আমি মনে করি এটি এখনও কোনও মানচিত্র (যথাযথ জাভাদোক সহ) ফিরিয়ে দেওয়া বুদ্ধিমান হতে পারে। তবুও, আমি উপরোক্ত আলোচিত কারণগুলির কারণে স্পষ্টতই ImmutableMap ফিরিয়ে আনতে পছন্দ করি।
এএমটি

4
@ টনিওএলগ্রিংও এটি কোনও কিছু লঙ্ঘন করছে না, এই পদ্ধতিগুলি alচ্ছিক। পছন্দ মতো List, কোনও গ্যারান্টি নেই List::addযা বৈধ। ব্যবহার করে দেখুন Arrays.asList("a", "b").add("c");। এটি রানটাইমে ব্যর্থ হবে এমন কোনও ইঙ্গিত নেই, তবুও তা করে। কমপক্ষে পেয়ারা আপনাকে মাথা তুলে দেয়।
njzk2

14

অন্যদিকে, যদি আমি এটি ছেড়ে চলে যাই তবে অন্যান্য বিকাশকারীরা এই বস্তুটি অপরিবর্তনীয় এই সত্যটি মিস করতে পারে।

আপনার জাভাদোকগুলিতে এটি উল্লেখ করা উচিত। বিকাশকারীরা সেগুলি পড়েন, আপনি জানেন।

সুতরাং, আমি অপরিবর্তনীয় বস্তুর একটি বড় লক্ষ্য অর্জন করব না; পরিবর্তন করতে পারে এমন বস্তুর সংখ্যা হ্রাস করে কোডটিকে আরও স্পষ্ট করে তোলার জন্য। সবচেয়ে খারাপ, কিছুক্ষণ পরে, কেউ এই বস্তুটি পরিবর্তন করার চেষ্টা করতে পারে এবং এর ফলে রানটাইম ত্রুটি হবে (সংকলক এটি সম্পর্কে সতর্ক করবে না)।

কোনও বিকাশকারী তার কোডটি নিরীক্ষিত প্রকাশ করে না। এবং যখন তিনি এটি পরীক্ষা করেন, তখন তিনি একটি ব্যতিক্রম ছুঁড়ে ফেলেছেন যেখানে তিনি কেবল কারণটিই দেখেননি যেখানে ফাইল এবং লাইনটি তিনি একটি অবিচ্ছেদ্য মানচিত্রে লেখার চেষ্টা করেছিলেন।

তবে খেয়াল রাখবেন যে কেবলমাত্র Mapনিজেই অপরিবর্তনীয় হবে, এতে থাকা বস্তুগুলি নয়।


10
"কোনও বিকাশকারী তার কোডটি নিরীক্ষিত প্রকাশ করে না।" আপনি কি এই উপর বাজি ধরতে চান? এই বাক্যটি যদি সত্য হয় তবে পাবলিক সফ্টওয়্যারগুলিতে অনেক কম (আমার ধারণা) বাগগুলি থাকতে পারে। আমি এমনকি "বেশিরভাগ বিকাশকারী ..." সম্পর্কেও নিশ্চিত নই। এবং হ্যাঁ, এটি হতাশাব্যঞ্জক।
টম

4
ঠিক আছে, টম ঠিক বলেছেন, আপনি কী বলার চেষ্টা করছেন তা আমি নিশ্চিত নই, তবে আপনি যা লিখেছেন তা স্পষ্টতই মিথ্যা। (এছাড়াও: লিঙ্গ অন্তর্ভুক্তির জন্য
টানুন

@ টম আমি অনুমান করেছি যে আপনি এই উত্তরে
কটূক্তি

10

যদি আমি এটি এটিকে ছেড়ে চলে যাই তবে অন্যান্য বিকাশকারীরা এই বস্তুটি অপরিবর্তনীয় এই সত্যটি মিস করতে পারে

এটি সত্য, তবে অন্যান্য বিকাশকারীদের তাদের কোড পরীক্ষা করা উচিত এবং নিশ্চিত করা উচিত যে এটি আচ্ছাদিত।

তবুও আপনার এটিকে সমাধান করার জন্য আরও দুটি বিকল্প রয়েছে:

  • জাভাদোক ব্যবহার করুন

    @return a immutable map
    
  • একটি বর্ণনামূলক পদ্ধতির নাম চয়ন করুন

    public Map<String, Integer> getImmutableMap()
    public Map<String, Integer> getUnmodifiableEntries()
    

    একটি কংক্রিট ব্যবহারের ক্ষেত্রে আপনি আরও ভাল পদ্ধতিগুলির নাম দিতে পারেন। যেমন

    public Map<String, Integer> getUnmodifiableCountByWords()
    

তুমি আর কি করতে পারো?!

আপনি ফিরে আসতে পারেন

  • অনুলিপি

    private Map<String, Integer> myMap;
    
    public Map<String, Integer> foo() {
      return new HashMap<String, Integer>(myMap);
    }
    

    এই পদ্ধতির ব্যবহার করা উচিত যদি আপনি আশা করেন যে প্রচুর ক্লায়েন্ট মানচিত্রটি সংশোধন করবে এবং যতক্ষণ না মানচিত্রে কেবল কয়েকটি প্রবেশিকা রয়েছে।

  • CopyOnWriteMap

    লেখার সংগ্রহগুলিতে অনুলিপি সাধারণত ব্যবহার করা হয় যখন আপনি
    একমত হতে চান। তবে ধারণাটি আপনার পরিস্থিতিতে আপনাকে সহায়তা করবে, যেহেতু একটি অনুলিপি অপারেশন (যেমন যোগ করুন, অপসারণ) এর অনুলিপি অভ্যন্তরীণ ডেটা কাঠামোর একটি অনুলিপি তৈরি করে একটি অনুলিপি তৈরি করে M

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

    এই পদ্ধতির ব্যবহার করা উচিত যদি আপনি আশা করেন যে কিছু ক্লায়েন্ট মানচিত্র পরিবর্তন করবে।

    দুঃখের বিষয় জাভা এর তেমন একটা নেই CopyOnWriteMap। তবে আপনি কোনও তৃতীয় পক্ষ খুঁজে পেতে পারেন বা এটি নিজে প্রয়োগ করতে পারেন।

অবশেষে আপনার মনে রাখা উচিত যে আপনার মানচিত্রে থাকা উপাদানগুলি এখনও পরিবর্তনযোগ্য হতে পারে।


8

যথাযথভাবে একটি ইমট্যুটেবল ম্যাপটি ফিরিয়ে দিন:

  • পদ্ধতির স্বাক্ষর (রিটার্নের ধরণ সহ) স্ব-ডকুমেন্টিং হওয়া উচিত। মন্তব্যগুলি গ্রাহক সেবার মতো: আপনার ক্লায়েন্টদের যদি তাদের উপর নির্ভর করতে হয় তবে আপনার প্রাথমিক পণ্যটি ত্রুটিযুক্ত।
  • কিছু ইন্টারফেস বা শ্রেণি কিনা তা প্রসারিত বা বাস্তবায়নের ক্ষেত্রে কেবল প্রাসঙ্গিক। একটি উদাহরণ দেওয়া (অবজেক্ট) দেওয়া, সময়ের ক্লায়েন্ট কোডের 99% কোনও বিষয় ইন্টারফেস বা শ্রেণি কিনা তা জানবে না বা যত্ন করবে না। আমি প্রথমে ধরে নিয়েছিলাম যে ইমটুটেবল ম্যাপটি একটি ইন্টারফেস। আমি লিঙ্কটি ক্লিক করার পরেই বুঝতে পারলাম এটি একটি শ্রেণি।

5

এটি ক্লাসের উপর নির্ভর করে। পেয়ারা ImmutableMapকোনও পরিবর্তনীয় শ্রেণিতে পরিবর্তনহীন দৃষ্টিভঙ্গি স্থাপনের উদ্দেশ্যে নয়। যদি আপনার ক্লাসটি পরিবর্তনযোগ্য হয় এবং কিছু কাঠামো থাকে যা মূলত একটি হয় ImmutableMapতবে রিটার্নের ধরণটি তৈরি করুন ImmutableMap। তবে, আপনার ক্লাসটি যদি পরিবর্তনযোগ্য হয় তবে তা করবেন না। আপনার যদি এটি থাকে:

public ImmutableMap<String, Integer> foo() {
    return ImmutableMap.copyOf(internalMap);
}

পেয়ারা প্রতিবার মানচিত্রটি অনুলিপি করবে। এটা ধীর। তবে যদি internalMapইতিমধ্যে একটি ছিল ImmutableMap, তবে এটি পুরোপুরি ঠিক আছে।

আপনি যদি নিজের ক্লাসটি ফিরতে সীমাবদ্ধ না করেন ImmutableMap, তবে আপনি পরিবর্তে এর Collections.unmodifiableMapমতো ফিরে আসতে পারেন:

public Map<String, Integer> foo() {
    return Collections.unmodifiableMap(internalMap);
}

মনে রাখবেন এটি মানচিত্রে একটি অপরিবর্তনীয় দৃশ্য । যদি internalMapপরিবর্তন হয়, তবে এর একটি ক্যাশেড অনুলিপি হবে Collections.unmodifiableMap(internalMap)। আমি এখনও এটি প্রাপ্তদের পক্ষে পছন্দ করি।


4
এগুলি ভাল পয়েন্ট, তবে সম্পূর্ণতার জন্য, আমি এই উত্তরটি পছন্দ করি যা ব্যাখ্যা করে যে এটি unmodifiableMapকেবলমাত্র রেফারেন্স ধারক দ্বারা পরিবর্তনযোগ্য নয় - এটি একটি দৃষ্টিভঙ্গি এবং ব্যাকিং মানচিত্রের ধারক ব্যাকিং মানচিত্রটি পরিবর্তন করতে পারে এবং তারপরে দৃশ্য পরিবর্তন হয়। সুতরাং এটি একটি গুরুত্বপূর্ণ বিবেচনা।
ডেভিডবাক

@A ডেভিডব্যাক মন্তব্য করেছেন, ব্যবহার সম্পর্কে খুব সতর্ক থাকুন Collections.unmodifiableMap। এই পদ্ধতিটি পৃথক পৃথক পৃথক নতুন মানচিত্র অবজেক্ট তৈরির পরিবর্তে মূল মানচিত্রে একটি ভিউ দেয়। সুতরাং আসল মানচিত্রের উল্লেখ করে অন্য যে কোনও কোড এটিকে সংশোধন করতে পারে এবং তারপরে অনুমিত অবিবেচনাযোগ্য মানচিত্রের ধারক সেই শক্ত উপায়টি শিখেন যা সত্যই তাদের নীচে থেকে মানচিত্রটি পরিবর্তন করা যায়। আমি নিজেও এই সত্যটি দ্বারা বিট হয়েছে। আমি হয় মানচিত্রের একটি অনুলিপি ফিরিয়ে দিতে বা পেয়ারা ব্যবহার করতে শিখেছি ImmutableMap
বাসিল বার্ক

5

এটি সঠিক প্রশ্নের উত্তর দিচ্ছে না, তবে মানচিত্রটি আদৌ ফেরত দেওয়া উচিত কিনা তা বিবেচনা করা মূল্যবান। মানচিত্রটি যদি পরিবর্তনযোগ্য না হয় তবে প্রদত্ত প্রাথমিক পদ্ধতিটি (কী) এর উপর ভিত্তি করে:

public Integer fooOf(String key) {
    return map.get(key);
}

এটি এপিআইকে আরও কঠোর করে তোলে। যদি কোনও মানচিত্র প্রকৃতপক্ষে প্রয়োজন হয় তবে এপিআইয়ের ক্লায়েন্টের কাছে এন্ট্রিগুলির একটি স্ট্রিম সরবরাহ করে রেখে দেওয়া যেতে পারে:

public Stream<Map.Entry<String, Integer>> foos() {
    map.entrySet().stream()
}

তারপরে ক্লায়েন্ট তার প্রয়োজন অনুসারে নিজস্ব পরিবর্তনযোগ্য বা পরিবর্তনযোগ্য মানচিত্র তৈরি করতে বা তার নিজস্ব মানচিত্রে এন্ট্রি যুক্ত করতে পারে। মানটি বিদ্যমান কিনা তা যদি ক্লায়েন্টের জানতে প্রয়োজন হয় তবে তার পরিবর্তে alচ্ছিকটি ফিরতে পারবেন:

public Optional<Integer> fooOf(String key) {
    return Optional.ofNullable(map.get(key));
}

-1

অপরিবর্তনীয় মানচিত্র হ'ল এক ধরণের মানচিত্র। সুতরাং মানচিত্রের রিটার্নের ধরণটি ঠিক আছে।

ব্যবহারকারীরা প্রত্যাবর্তিত বস্তুটি সংশোধন করবেন না তা নিশ্চিত করার জন্য, পদ্ধতির ডকুমেন্টেশনগুলি প্রত্যাবর্তিত বস্তুর বৈশিষ্ট্য বর্ণনা করতে পারে।


-1

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

নিম্নলিখিত নিবন্ধটি একবার দেখুন:

অ্যান্ডি গিবসন


4
অপ্রয়োজনীয় মোড়কে ক্ষতিকারক বলে মনে করা হয়।
djechlin

আপনি ঠিক বলেছেন, ইন্টারফেসটি পর্যাপ্ত হওয়ায় আমি এখানে একটি মোড়ক ব্যবহার করব না।
ডাব্লুস্প্পসন

আমার অনুভূতি আছে যদি এটি করা ঠিক ছিল তবে ইমটুটেবল ম্যাপটি ইতিমধ্যে একটি ইমটুটেবল ম্যাপইন্টারফেস বাস্তবায়ন করতে পারে তবে আমি প্রযুক্তিগতভাবে এটি বুঝতে পারি না।
djechlin

মূলত পেয়ারা বিকাশকারীরা যে পরিকল্পনাটি করেছিলেন তা নয়, এটি এই সত্য যে এই বিকাশকারীটি আর্কিটেকচারটি সজ্জিত করতে এবং ইমটুটেবলম্যাপের ব্যবহার প্রকাশ করতে চাইবে না। এটি করার একটি উপায় হ'ল একটি ইন্টারফেস ব্যবহার করা। আপনি উল্লেখ হিসাবে একটি মোড়ক ব্যবহার করা প্রয়োজনীয় নয় এবং তাই প্রস্তাবিত নয়। প্রত্যাবর্তন মানচিত্র বিভ্রান্তিকর হওয়ায় অবাঞ্ছিত। সুতরাং মনে হচ্ছে লক্ষ্যটি যদি এনক্যাপসুলেশন হয় তবে একটি ইন্টারফেসই সেরা বিকল্প।
ডাব্লুস্প্পসন

Mapইন্টারফেসটি প্রসারিত (বা বাস্তবায়ন) না করে এমন কোনও কিছু ফিরিয়ে দেওয়ার অসুবিধাটি হ'ল আপনি এটি ingালাই Mapছাড়াই কোনও এপিআই ফাংশনে আশা করে এটি পাস করতে পারবেন না । এটিতে অন্যান্য ধরণের মানচিত্রের সমস্ত ধরণের অনুলিপি-অন্তর্ভুক্ত রয়েছে। এগুলি ছাড়াও, যদি পরিবর্তনটি ইন্টারফেসের দ্বারা কেবল "লুকানো" থাকে তবে আপনার ব্যবহারকারীরা সর্বদা আপনার কোডটি কাস্ট করে এবং সেইভাবে আপনার কোডটি ভেঙে চারিদিকে কাজ করতে পারে।
হাল্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.