জাভা 8 getters alচ্ছিক ধরনের ফিরে উচিত?


288

Optional জাভা 8 তে প্রবর্তিত প্রকারটি অনেক বিকাশকারীদের জন্য একটি নতুন জিনিস।

Optional<Foo>ক্লাসিকের জায়গায় কোনও গিটার পদ্ধতি রিটার্নিং টাইপ কি Fooভাল অনুশীলন? ধরুন মানটি হতে পারে null


8
যদিও এটি মতামত উত্তর আকর্ষণ করতে পারে, এটি একটি ভাল প্রশ্ন। আমি এই বিষয়ে সত্য তথ্য সহ একটি উত্তরের অপেক্ষায় রয়েছি।
জাস্টিন

8
প্রশ্নটি হ'ল নালিকাটি অনিবাৰ্য oid কোনও উপাদানটির একটি সম্পত্তি থাকতে পারে যা নালার অনুমতি দেওয়া হয়েছে, কিন্তু তবুও, সেই উপাদানটি ব্যবহার করে প্রোগ্রামার সেই সম্পত্তিটিকে কঠোরভাবে রাখার সিদ্ধান্ত নিতে পারে null। সুতরাং প্রোগ্রামার এর সাথে ডিল করা উচিত নয় Optional। অথবা, অন্য কথায়, কোনও nullঅনুসন্ধানের ফলাফলের ( Optionalযেমন উপযুক্ত) এর মতো একটি মানের উপস্থিতি সত্যিই উপস্থাপন করে বা nullসম্ভাব্য মানগুলির সেটগুলির কেবলমাত্র একজন সদস্য।
হলগার

1
আরও দেখুন আলোচনা @NotNullটীকা: stackoverflow.com/q/4963300/873282
koppor

উত্তর:


515

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

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

আমি মনে করি নিয়মিতভাবে এটি ব্যবহারকারীর জন্য ফেরতের মান হিসাবে ব্যবহার করা অবশ্যই অতিরিক্ত ব্যবহারের হবে be

এটি এড়ানো উচিত withচ্ছিকর সাথে এখানে কোন ভুল নেই , অনেকেই যা চান তা ঠিক তা নয়, এবং সেই অনুসারে আমরা উদ্যোগী অতিরিক্ত ব্যবহারের ঝুঁকি নিয়ে মোটামুটি উদ্বিগ্ন ছিলাম।

(পাবলিক সার্ভিস ঘোষণা: কখনও কল Optional.getযদি না আপনি প্রমাণ করতে পারেন এটা নাল হতে হবে না; পরিবর্তে মত নিরাপদ কোনো পদ্ধতি ব্যবহার করে orElseবা ifPresent। অতীতের দিকে দৃষ্টিপাত, আমরা বলা উচিত getভালো কিছু getOrElseThrowNoSuchElementExceptionবা কিছু এটি পর্যন্ত পরিষ্কার ছিল যে একটি অত্যন্ত বিপজ্জনক পদ্ধতি তৈরি যা Optionalপ্রথম স্থানে পুরো উদ্দেশ্যটিকে ক্ষুন্ন করেছিল Less পাঠটি শিখেছে UP (আপডেট: জাভা 10 রয়েছে Optional.orElseThrow(), যা শব্দার্থগতভাবে সমান get(), তবে যার নামটি আরও উপযুক্ত))


24
(শেষ অংশটি সম্পর্কে) ... এবং যখন আমরা আত্মবিশ্বাসী হই, যে মানটি আমরা কখনই nullব্যবহার করতে পারি না orElseThrow(AssertionError::new), আহেম বা orElseThrow(NullPointerException::new)...
হোলার

25
আপনি ভিন্নভাবে কি করেছ যদি আপনার উদ্দেশ্য হবে করেছিলেন হয়তো বা কিছু ধরনের একটি সাধারণ পরিচয় করিয়ে দিতে হয়েছে? এমন কোনও উপায় আছে যেখানে ptionচ্ছিক কোনওটির জন্য বিলটি ফিট করে না, বা এটি কি কেবল নতুন এপিআইয়ের মধ্যে Oচ্ছিকাগুলি প্রবর্তন করা এটি জাভা-ইশ হিসাবে তৈরি করবে?
ডেভিড মোল

22
"সাধারণ-উদ্দেশ্য টাইপ" দ্বারা, আমি এর অর্থ এটি প্রায় লাইব্রেরি ক্লাস সরবরাহ করার চেয়ে এটি ভাষার প্রকারের সিস্টেমে তৈরি করা। (কিছু ভাষার টি? (টি বা নাল) এবং টি! (অ-টি নয়)) এর জন্য টাইপ রয়েছে ptionচ্ছিক কেবল একটি শ্রেণি; আমরা ভাষা সমর্থন সহ যেভাবে ফু ও ptionচ্ছিক <ফু> এর মধ্যে অন্তর্নিহিত রূপান্তর করতে পারি না।
ব্রায়ান গয়েটজ

11
আমি কিছুক্ষণ ভাবছিলাম কেন জাভা জগতের উপর জোর Oচ্ছিক, এবং আরও স্থির বিশ্লেষণের দিকে কেন নয়। Ptionচ্ছিক কিছু সুবিধা আছে, কিন্তু বিশাল সুবিধা যে nullপিছনের সামঞ্জস্য হয়; Map::getএকটি অযোগ্য Vনয়, ফেরৎ দেয় Optional<V>এবং এটি কখনই বদলাবে না। @Nullableযদিও এটি সহজেই বর্ণিত হতে পারে ।
অমূল্যের

21
আমার কোনও ধারণা ছিল না যে এটি কোনও সম্পত্তির রিটার্ন মান হিসাবে ব্যবহার করা আপনার স্টাট ওভারফ্লোতে এই উত্তরটি পড়া না হওয়া অবধি কী নয়। প্রকৃতপক্ষে, আমি বিশ্বাস করতে পেরেছিলাম যে ওরাকলের ওয়েবসাইটে এই নিবন্ধটি পড়ার পরে আপনার ঠিক কী ইচ্ছা ছিল: oracle.com/technetwork/articles/java/… স্পষ্ট করার জন্য আপনাকে ধন্যবাদ
জেসন থম্পসন

73

নিজের গবেষণা সম্পর্কে কিছুটা গবেষণা করার পরে, আমি বেশ কয়েকটি জিনিস নিয়ে এসেছি যা যখন এটি উপযুক্ত তখন প্রস্তাবিত হতে পারে। সর্বাধিক অনুমোদিত একটি ওরাকল নিবন্ধ থেকে নিম্নলিখিত উদ্ধৃতি:

"এটি লক্ষ করা গুরুত্বপূর্ণ যে ptionচ্ছিক শ্রেণীর উদ্দেশ্য প্রতিটি একক নাল রেফারেন্সকে প্রতিস্থাপন করা নয় । পরিবর্তে এর উদ্দেশ্য হ'ল আরও বোধগম্য এপিআই ডিজাইন করা যাতে কেবল কোনও পদ্ধতির স্বাক্ষরটি পড়ে আপনি বলতে পারেন যে আপনি একটি alচ্ছিক মান আশা করতে পারে This এটি আপনাকে একটি মানের অভাবে মোকাবেলা করার জন্য একটি ptionচ্ছিককে সক্রিয়ভাবে আনপ্রেপ করতে বাধ্য করে। " - নাল পয়েন্টার ব্যতিক্রম ক্লান্ত? জাভা এসই 8 এর ptionচ্ছিক ব্যবহার বিবেচনা করুন!

আমি জাভা 8 from চ্ছিক: এটি কীভাবে ব্যবহার করব তা থেকে এই উদ্ধৃতিটি পেয়েছি

"Conteচ্ছিক এই বিষয়গুলিতে ব্যবহার করার অর্থ নয়, কারণ এটি আমাদের কিছু কিনবে না:

  • ডোমেন মডেল স্তরে (সিরিয়ালযোগ্য নয়)
  • ডিটিওতে (একই কারণে)
  • পদ্ধতিগুলির ইনপুট পরামিতিগুলিতে
  • কনস্ট্রাক্টর প্যারামিটারে "

যা কিছু বৈধ পয়েন্ট উত্থাপন বলে মনে হয়।

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


11
stackoverflow.com/questions/25693309 - দেখে মনে হচ্ছে জ্যাকসন এটি ইতিমধ্যে সমর্থন করে, তাই "সিরিয়ালাইজযোগ্য নয়" কোনও বৈধ কারণ হিসাবে পাস করেন না :)
ভ্ল্যাক

1
আমি কেন আপনার Optionalপদ্ধতির ইনপুট পরামিতিগুলিতে (আরও সুনির্দিষ্টভাবে নির্মাণকারী) ব্যবহার করে "আমাদের কোনও জিনিস কিনবে না" আপনার উত্তর ঠিকানা থাকার পরামর্শ দিচ্ছি । dolszewski.com/java/java-8-tiontion--- কেসগুলির একটি দুর্দান্ত ব্যাখ্যা রয়েছে।
গিলি

আমি খুঁজে পেয়েছি যে APIচ্ছিক ফলাফলগুলি কারি করার জন্য অন্যান্য এপিআইতে রূপান্তর করা দরকার Oচ্ছিক পরামিতি প্রয়োজন। ফলাফলটি মোটামুটি বোধগম্য এপিআই। স্ট্যাকওভারফ্লো.com
কার্ল দ্য প্যাগান

1
লিঙ্কটি নষ্ট হয়ে গেছে। আপনি দয়া করে উত্তর আপডেট করতে পারেন?
সফ্টনার্ন

2
সমস্যাটি হ'ল বিকাশকারীর সর্বোত্তম উদ্দেশ্য সত্ত্বেও এটি প্রায়শই এপিআই উন্নত করে না। আমি ptionচ্ছিকের খারাপ ব্যবহারের উদাহরণ সংগ্রহ করেছি , সমস্তই উত্পাদন কোড থেকে নেওয়া, যা আপনি যাচাই করতে পারেন।
মিগুয়েলমুনোজ

20

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


14
এই পরামর্শটি হ'ল স্ট্যাকওভারফ্লো . com/a/26328555/3553087 - এ "আমরা উদ্যোগী অতিরিক্ত ব্যবহারের ঝুঁকি নিয়ে উদ্বিগ্ন" বলতে বোঝাচ্ছি
ব্রায়ান গয়েটজ

13

কারণ Optionalজাভা যোগ করা হয়েছিল এই কারণে হল:

return Arrays.asList(enclosingInfo.getEnclosingClass().getDeclaredMethods())
    .stream()
    .filter(m -> Objects.equals(m.getName(), enclosingInfo.getName())
    .filter(m ->  Arrays.equals(m.getParameterTypes(), parameterClasses))
    .filter(m -> Objects.equals(m.getReturnType(), returnType))
    .findFirst()
    .getOrThrow(() -> new InternalError(...));

এর চেয়ে পরিষ্কার:

Method matching =
    Arrays.asList(enclosingInfo.getEnclosingClass().getDeclaredMethods())
    .stream()
    .filter(m -> Objects.equals(m.getName(), enclosingInfo.getName())
    .filter(m ->  Arrays.equals(m.getParameterTypes(), parameterClasses))
    .filter(m -> Objects.equals(m.getReturnType(), returnType))
    .getFirst();
if (matching == null)
  throw new InternalError("Enclosing method not found");
return matching;

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

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

আমি মনে করি এই ত্রুটিটি সমাধানের জন্য সত্যিকারের তৃষ্ণা হয়েছিল, কারণ নতুন ptionচ্ছিক শ্রেণিটি দেখে এর এত লোক যে এর উদ্দেশ্য ধরে নিয়েছিল তা হ'ল এপিআইগুলিতে স্পষ্টতা যুক্ত করা। লোকেদের "বিকল্পগুলি কীভাবে ফিরে আসবে?" না, এগুলি সম্ভবত করা উচিত নয়, যদি না আপনি প্রত্যাশাটি কার্যকরী প্রোগ্রামিংয়ে ব্যবহৃত হওয়ার প্রত্যাশা করেন, যা খুব সম্ভবত না। প্রকৃতপক্ষে, আপনি যদি জাভা এপিআইতে ptionচ্ছিক ব্যবহৃত হয় তা লক্ষ্য করেন তবে এটি মূলত স্ট্রিম ক্লাসগুলিতে থাকে যা কার্যকরী প্রোগ্রামিংয়ের মূল বিষয়। (আমি খুব ভালভাবে পরীক্ষা করে দেখিনি, তবে স্ট্রিম ক্লাসগুলিই কেবল তাদের ব্যবহৃত স্থান হতে পারে ))

আপনি যদি কিছু ফাংশনাল কোডে একটি গেটর ব্যবহার করার পরিকল্পনা করেন, তবে এটি একটি আদর্শ গেটর এবং দ্বিতীয়টি ptionচ্ছিক ফিরে আসা ভাল ধারণা হতে পারে।

ওহ, এবং যদি আপনার শ্রেণি সিরিয়ালযোগ্য হওয়ার প্রয়োজন হয় তবে আপনার একেবারে ptionচ্ছিক ব্যবহার করা উচিত নয়।

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

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

এটি সবকিছু পরিবর্তন করে।

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

(এটির সাথে একটি নতুন ভাষাও সম্বোধন করে। কোটলিন, যা জাভা বাইট কোডটি সংকলন করে, আপনাকে নির্দিষ্ট করার অনুমতি দেয় যে কোনও বস্তু যখন আপনি এটি ঘোষণার সময় নਾਲ হতে পারে It's এটি একটি ক্লিনার পদ্ধতির))

মূল পোস্টে সংযোজন (সংস্করণ 2)

অনেক চিন্তাভাবনা করার পরে, আমি অনিচ্ছাকৃতভাবে এই সিদ্ধান্তে পৌঁছেছি যে এক শর্তে ptionচ্ছিক ফিরিয়ে দেওয়া গ্রহণযোগ্য: এটি পুনরুদ্ধার করা মানটি আসলে শূন্য হতে পারে। আমি প্রচুর কোড দেখেছি যেখানে লোকেরা নিয়মিত গিটারগুলি থেকে tersচ্ছিক ফিরে আসে যা সম্ভবত বাতিল হয়ে যায় না। আমি এটি একটি খুব খারাপ কোডিং অনুশীলন হিসাবে দেখছি যা কোডগুলিতে কেবল জটিলতা যুক্ত করে, যা বাগগুলি আরও বেশি সম্ভাবনা তৈরি করে। কিন্তু যখন প্রত্যাবর্তিত মানটি আসলে শূন্য হতে পারে, তখন এগিয়ে যান এবং এটি একটি insideচ্ছিকের মধ্যে আবৃত করুন।

মনে রাখবেন যে পদ্ধতিগুলি কার্যকরী প্রোগ্রামিংয়ের জন্য ডিজাইন করা হয়েছে এবং এর জন্য একটি ফাংশন রেফারেন্স প্রয়োজন, দুটি আকারে লিখিত হবে (এবং হওয়া উচিত) যার মধ্যে একটি ptionচ্ছিক ব্যবহার করে। উদাহরণস্বরূপ, Optional.map()এবং Optional.flatMap()উভয়ই ফাংশন উল্লেখগুলি গ্রহণ করে। প্রথমটি কোনও সাধারণ গেটারের জন্য একটি রেফারেন্স নেয় এবং দ্বিতীয়টি oneচ্ছিকভাবে ফিরে আসে one সুতরাং আপনি কোনও Oচ্ছিক যেখানে মান নালার হতে পারে তা ফেরত দিয়ে কাউকে অনুগ্রহ করছেন না।

সমস্ত কিছু বলার পরেও, আমি এখনও দেখতে পাচ্ছি নুলস চেকার দ্বারা ব্যবহৃত পদ্ধতির নালগুলি মোকাবেলার সেরা উপায়, যেহেতু তারা সময় ত্রুটিগুলি সঙ্কলন করতে রানটাইম বাগগুলি থেকে নালপয়েন্টারএক্সেপশনগুলি ঘুরিয়ে দেয়।


2
এই উত্তরটি আমার কাছে সবচেয়ে উপযুক্ত বলে মনে হচ্ছে। Jচ্ছিক কেবল জাভা 8 এ যুক্ত করা হয়েছিল যখন স্ট্রিমগুলি যুক্ত করা হয়েছিল। এবং কেবলমাত্র স্ট্রিম ফাংশনগুলি alচ্ছিকভাবে ফিরে আসে যতদূর আমি দেখেছি।
আর্কিট করুন

1
আমি মনে করি এটি সেরা উত্তরগুলির মধ্যে একটি। Knowচ্ছিক কী এবং কীভাবে এটি কাজ করে তা লোকেরা জানে। তবে সবচেয়ে বিভ্রান্তিমূলক অংশটি হ'ল এটি কোথায় ব্যবহার করা যায় এবং কীভাবে এটি ব্যবহার করতে হয়। এটি পড়ে এটি অনেক সন্দেহ মুছে ফেলে।
প্যারাগফ্লূম

3

আপনি যদি আধুনিক সিরিয়ালাইজার এবং অন্যান্য ফ্রেমওয়ার্ক ব্যবহার করেন যা বুঝতে পারে Optionalতবে আমি সিম এবং ডোমেন স্তরগুলি লেখার সময় এই নির্দেশিকাগুলি ভালভাবে কাজ করতে দেখেছি Entity:

  1. যদি সিরিয়ালাইজেশন স্তর (সাধারণত একটি ডিবি) সারণীতে nullকলামে কোনও কক্ষের জন্য মানকে অনুমতি দেয় , তবে প্রাপ্তিটি বিকাশকারীকে নির্দেশ করে ফিরে আসতে পারে যে এই মানটি যথাযথভাবে বাতিল হতে পারে এবং তাদের এটি পরিচালনা করা উচিত। ডিবি গ্যারান্টী বা নিশ্চয়তা দিচ্ছে এমন মান নাল হবে না তারপর সংগ্রহকারী উচিত না একটি ইন এই মোড়ানো ।BARFOOFoo.getBar()OptionalOptional
  2. Foo.barহওয়া উচিত privateএবং না হতে Optional। সত্যিই কোন কারণ এটা হতে জন্য Optionalযদি তা না হয় private
  3. সেটার Foo.setBar(String bar)ধরণ গ্রহণ করা উচিত barএবং না Optional । যদি কোনও nullযুক্তি ব্যবহার করা ঠিক থাকে তবে জাভাডক মন্তব্যে এটি লিখুন। যদি nullকোনও IllegalArgumentExceptionকোনও উপযুক্ত ব্যবসায়ের যুক্তি ব্যবহার করা ঠিক না হয় তবে আইএমএইচও, আরও উপযুক্ত।
  4. কন্সট্রাকটর প্রয়োজন হবে না Optionalআর্গুমেন্ট (পয়েন্ট থেকে 3 একই কারণে জন্য)। সাধারণত আমি কেবল কনস্ট্রাক্টরের মধ্যে যুক্তিগুলি অন্তর্ভুক্ত করি যা অবশ্যই সিরিয়ালাইজেশন ডাটাবেসে নন-নাল হতে হবে

উপরেরটিকে আরও দক্ষ করে তোলার জন্য, আপনি গেটারগুলি তৈরির জন্য এবং সম্পর্কিত টেম্পলেটগুলির জন্য আপনার আইডিই টেম্পলেটগুলি সম্পাদনা করতে চাইতে পারেন toString() , equals(Obj o)ইত্যাদি (অধিকাংশ আইডিই জেনারেটর ইতিমধ্যে NULLs সাথে মোকাবিলা) তাদের জন্য সরাসরি ব্যবহার ক্ষেত্র বা।

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