জাভাতে খালি মানচিত্র তৈরির সর্বোত্তম উপায়


117

আমার একটি খালি মানচিত্র তৈরি করা দরকার।

if (fileParameters == null)
    fileParameters = (HashMap<String, String>) Collections.EMPTY_MAP;

সমস্যাটি হ'ল উপরের কোডটি এই সতর্কতাটি উত্পন্ন করে : সুরক্ষাটি টাইপ করুন: মানচিত্র থেকে হাশম্যাপে চেক করা কাস্ট করা না

এই খালি মানচিত্রটি তৈরি করার সর্বোত্তম উপায় কী?


ফাইলপ্যারামিটারগুলির জন্য আপনার ঘোষিত প্রকারটি কী?
jjnguy

আপনি সম্ভবত একটি ক্লাসকাস্ট এক্সেকশনও পাবেন।
টম হাটিন -

1
ফাইলপ্যারামিটারগুলি হ্যাশম্যাপ নয় মানচিত্র হওয়া উচিত।
স্টিভ কুও

উত্তর:


241

1) মানচিত্রটি যদি পরিবর্তনযোগ্য হতে পারে:

Collections.emptyMap()

// or, in some cases:
Collections.<String, String>emptyMap()

আপনাকে মাঝে মাঝে ব্যবহার করতে হবে যখন সংকলক স্বয়ংক্রিয়ভাবে কোন ধরণের মানচিত্রের প্রয়োজন তা নির্ধারণ করতে পারে না (এটিকে টাইপ ইনফারেন্স বলা হয় )। উদাহরণস্বরূপ, এর মতো ঘোষিত একটি পদ্ধতি বিবেচনা করুন:

public void foobar(Map<String, String> map){ ... }

খালি ম্যাপটি সরাসরি এটিতে পৌঁছে দেওয়ার সময়, আপনাকে প্রকারটি সম্পর্কে স্পষ্ট করে বলতে হবে:

foobar(Collections.emptyMap());                 // doesn't compile
foobar(Collections.<String, String>emptyMap()); // works fine

2) যদি আপনার মানচিত্রটি পরিবর্তন করতে সক্ষম হতে হয় তবে উদাহরণস্বরূপ:

new HashMap<String, String>()

( তেহাব্লানেক্স যেমন উল্লেখ করেছেন )


সংযোজন : আপনার প্রকল্পটি যদি পেয়ারা ব্যবহার করে তবে আপনার নিম্নলিখিত বিকল্পগুলি রয়েছে:

1) অপরিবর্তনীয় মানচিত্র:

ImmutableMap.of()
// or:
ImmutableMap.<String, String>of()

মঞ্জুর, তুলনায় এখানে কোন বড় সুবিধা Collections.emptyMap()জাভাডোক থেকে :

এই মানচিত্রটি তুলনামূলকভাবে আচরণ করে এবং সম্পাদন করে এবং Collections.emptyMap()মূলত আপনার কোডটির ধারাবাহিকতা এবং রক্ষণাবেক্ষণের জন্য পছন্দনীয়।

2) মানচিত্র যা আপনি সংশোধন করতে পারেন:

Maps.newHashMap()
// or:
Maps.<String, String>newHashMap()

Mapsঅন্যান্য ধরণের মানচিত্র ইনস্ট্যান্ট করার জন্য অনুরূপ কারখানা পদ্ধতি রয়েছে যেমন যেমন TreeMapবা LinkedHashMap


আপডেট (2018) : জাভা 9 বা আরও নতুনতে, একটি অপরিবর্তনীয় খালি মানচিত্র তৈরি করার জন্য সংক্ষিপ্ততম কোডটি হ'ল:

Map.of()

... জেপ 269 থেকে নতুন সুবিধাযুক্ত কারখানার পদ্ধতিগুলি ব্যবহার করে । 😎


বেশিরভাগ ক্ষেত্রে, টাইপ করুন অনুমানের কাজগুলি (যেমন মানচিত্র = সংগ্রহসমূহ
e এমপিটিম্যাপ

হ্যাঁ, সত্য। আমি উত্তরটি আরও বিস্তৃত হতে সম্পাদিত করেছি।
জোনিক

16

সমস্যাটি হ'ল এই মানচিত্রটি কেবলমাত্র হ্যাশম্যাপ নয় একটি মানচিত্রের ক্ষেত্রে প্রয়োগ করা যেতে পারে
জর্জিও

7
আপনার (সাধারণত) তাদের নির্দিষ্ট ধরণের অবজেক্টগুলি ঘোষণা করা এড়াতে হবে এবং পরিবর্তে ইন্টারফেস (বা বিমূর্ত অভিভাবক) ব্যবহার করা উচিত। "হ্যাশম্যাপ <স্ট্রিং, স্ট্রিং> ফু" এড়ানোর চেষ্টা করুন; এবং "মানচিত্র <স্ট্রিং, স্ট্রিং> ফু" ব্যবহার করুন পরিবর্তে
তোফুবিয়ার


10

আপনার যদি হ্যাশম্যাপের উদাহরণ প্রয়োজন তবে সর্বোত্তম উপায় হ'ল:

fileParameters = new HashMap<String,String>();

মানচিত্রটি একটি ইন্টারফেস হওয়ায় আপনাকে কোনও শ্রেণি বাছাই করা দরকার যা এটি খালি উদাহরণ তৈরি করতে চাইলে তা ইনস্ট্যান্ট করে দেয়। হ্যাশম্যাপ অন্য যে কোনও হিসাবে ভাল বলে মনে হচ্ছে - সুতরাং এটি ব্যবহার করুন।


7

হয় Collections.emptyMap(), বা যদি টাইপ অনুমান আপনার ক্ষেত্রে কাজ করে না,
Collections.<String, String>emptyMap()


2

যেহেতু অনেক ক্ষেত্রে খালি ম্যাপ নাল-সেফ ডিজাইনের জন্য ব্যবহৃত হয়, আপনি nullToEmptyইউটিলিটি পদ্ধতিটি ব্যবহার করতে পারেন :

class MapUtils {

  static <K,V> Map<K,V> nullToEmpty(Map<K,V> map) {
    if (map != null) {
      return map;
    } else {
       return Collections.<K,V>emptyMap(); // or guava ImmutableMap.of()
    }
  }

}  

একইভাবে সেটগুলির জন্য:

class SetUtils {

  static <T> Set<T> nullToEmpty(Set<T> set) {
    if (set != null) {
      return set;
    } else {
      return Collections.<T>emptySet();
    }
  }

}

এবং তালিকা:

class ListUtils {

  static <T> List<T> nullToEmpty(List<T> list) {
    if (list != null) {
      return list;
    } else {
      return Collections.<T>emptyList();
    }
  }

}

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