আমি দেখতে পাচ্ছি @Nullable
এবং @Nonnull
টীকাগুলি প্রতিরোধে সহায়ক হতে পারে NullPointerException
তবে তারা খুব বেশি প্রচার করে না।
- এই টীকাগুলির কার্যকারিতা ইন্ডিয়ারেশনের এক স্তরের পরে পুরোপুরি বন্ধ হয়ে যায়, তাই আপনি যদি কেবল কয়েকটি যুক্ত করেন তবে এগুলি খুব দূরে প্রচার করে না।
- যেহেতু এই টীকাগুলি কার্যকরভাবে প্রয়োগ করা হয়নি তাই মানটি চিহ্নিত করার ঝুঁকি রয়েছে যার সাথে চিহ্নিত মানটি
@Nonnull
নাল নয় এবং ফলস্বরূপ নাল চেকগুলি সম্পাদন করা হচ্ছে না।
নিচের কোড একটি প্যারামিটার দিয়ে চিহ্নিত ঘটায় @Nonnull
হতে null
কোনো অভিযোগ উত্থাপন ছাড়াই। এটি NullPointerException
চালিত হলে এটি ছুড়ে দেয় ।
public class Clazz {
public static void main(String[] args){
Clazz clazz = new Clazz();
// this line raises a complaint with the IDE (IntelliJ 11)
clazz.directPathToA(null);
// this line does not
clazz.indirectPathToA(null);
}
public void indirectPathToA(Integer y){
directPathToA(y);
}
public void directPathToA(@Nonnull Integer x){
x.toString(); // do stuff to x
}
}
এই টীকাগুলি আরও কঠোরভাবে প্রয়োগ করার এবং / বা আরও প্রচার করার কোনও উপায় আছে কি?
@Nonnull
কোনও @Nonnull
পদ্ধতি কল করার সময় একটি কাস্টের প্রয়োজন । অবশ্যই, জাভা 7 এ টীকা সহ কাস্টিং সম্ভব নয়, তবে জাভা 8 ক্যাসেট সহ ভেরিয়েবলের ব্যবহারের জন্য টীকা প্রয়োগ করার ক্ষমতা যুক্ত করবে। সুতরাং এটি জাভা 8 এ বাস্তবায়ন করা সম্ভব হতে পারে
(@NonNull Integer) y
সিন্টেক্সিকভাবে সম্ভব, তবে একটি সংকলককে টীকা অনুসারে কোনও নির্দিষ্ট বাইট কোড নির্গত করার অনুমতি নেই। রানটাইম সংবেদনের জন্য ক্ষুদ্র সহায়ক সহায়তার পদ্ধতিগুলি যেমন bugs.eclipse.org/442103 (যেমন, directPathToA(assertNonNull(y))
) তে আলোচনা করা যথেষ্ট - তবে মনে রাখবেন, এটি কেবল দ্রুত ব্যর্থ হতে সহায়তা করে। একমাত্র নিরাপদ উপায় হ'ল আসল নাল চেক (প্লাস আশা করি অন্য শাখায় বিকল্প বাস্তবায়ন) performing
@Nonnull
এবং @Nullable
আপনি কোন বিষয়ে কথা বলছেন তা এই প্রশ্নের পক্ষে সহায়ক হবে ( এই প্রশ্নটি দেখুন )। আপনি কি প্যাকেজে টীকা নিয়ে কথা বলছেন javax.annotation
?
@Nullable
বা@Nonnull
, কিন্তু যদি তারা মূল্য খুবই "সম্ভবত অনুরোধ করা বিতর্কে" হয়