@ ননাল এনোটেশন ব্যবহার


346

আমি জাভাতে কিছু পদ্ধতি দেখেছি হিসাবে ঘোষিত:

void foo(@Nullable Object obj)
{ ... }

@Nullableএখানে অর্থ কি ? এর অর্থ কি ইনপুট হতে পারে null?

টিকা ছাড়াই, ইনপুটটি এখনও শূন্য হতে পারে, তাই আমার ধারণা কেবল এটিই নয়?


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

8
@Nullableআপনার প্রশ্নের প্রসঙ্গে কোন লাইব্রেরি সরবরাহ করছে? এটা কি চেকার?
8bitjunkie

উত্তর:


366

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

এটি FindBugs এর মতো কোড বিশ্লেষকদের জন্য একটি ইঙ্গিত হিসাবে কাজ করে । উদাহরণস্বরূপ, যদি এই জাতীয় কোনও পদ্ধতি প্রথমে শূন্যের জন্য পরীক্ষা না করেই তার যুক্তিটিকে সম্মতি জানায়, ফাইন্ডব্যাগস একটি সতর্কতা প্রেরণ করবে।


82

এই টিকাটি সাধারণত মুছে ফেলার জন্য ব্যবহৃত হয় NullPointerExceptions@Nullableএই পরামিতি হতে পারে বলে nullগুগল গুইসে এই জাতীয় আচরণের একটি ভাল উদাহরণ পাওয়া যাবে । এই লাইটওয়েট নির্ভরতা ইনজেকশন কাঠামোতে আপনি বলতে পারেন যে এই নির্ভরতা হতে পারে null। যদি আপনি nullকোনও টিকা ছাড়াই পাস করার চেষ্টা করেন তবে কাঠামোটি এটি করাতে অস্বীকার করবে।

আরও বেশি কী টীকা @Nullableব্যবহার করা যেতে পারে @NotNull। এখানে আপনি করতে পারেন খুঁজে কিভাবে তাদের সঠিকভাবে ব্যবহার করার জন্য কিছু টিপস। ইনটেলিজজে কোড পরিদর্শন টীকাগুলি পরীক্ষা করে এবং কোডটি ডিবাগ করতে সহায়তা করে।



1

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

public String foo(@Nullable String mayBeNothing) {
   return Optional.ofNullable(mayBeNothing).orElse("Really Nothing");
}

আপনি সেখানে অদলবদল করে কিছু ব্যতিক্রম ছুঁড়ে ফেলতে .orElseপারেন orElseThrow(() -> new Exception("Dont' send a null"))

আপনি যদি @ নুলাবল ব্যবহার করতে না চান, যা কার্যকরীভাবে কিছুই যোগ করে না, তবে কেন কেবল mayBe...আপনার অভিপ্রায়টি পরিষ্কার তা দিয়ে পরামিতিটির নাম রাখবেন না ।

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