publicক্ষেত্র ব্যবহার করবেন না
publicআপনি যখন সত্যই কোনও শ্রেণীর অভ্যন্তরীণ আচরণটি মোড়াতে চান ক্ষেত্রগুলি ব্যবহার করবেন না । java.io.BufferedReaderউদাহরণস্বরূপ নিন । এটির নিম্নলিখিত ক্ষেত্র রয়েছে:
private boolean skipLF = false; // If the next character is a line feed, skip it
skipLFসমস্ত পড়ার পদ্ধতিতে পড়া এবং লিখিত হয়। যদি কোনও বাহ্যিক শ্রেণি পৃথক থ্রেডে চলতে থাকে তবে skipLFসে পড়ার মাঝামাঝি জায়গায় দূষিতভাবে রাষ্ট্রের সংশোধন করে ? BufferedReaderস্পষ্টভাবে haywire যেতে হবে।
publicক্ষেত্র ব্যবহার করুন
Pointউদাহরণস্বরূপ এই ক্লাসটি নিন :
class Point {
private double x;
private double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return this.x;
}
public double getY() {
return this.y;
}
public void setX(double x) {
this.x = x;
}
public void setY(double y) {
this.y = y;
}
}
এটি লিখতে খুব বেদনাদায়ক দুটি পয়েন্টের মধ্যকার দূরত্ব গণনা করবে।
Point a = new Point(5.0, 4.0);
Point b = new Point(4.0, 9.0);
double distance = Math.sqrt(Math.pow(b.getX() - a.getX(), 2) + Math.pow(b.getY() - a.getY(), 2));
ক্লাসের সরল গেটার এবং সেটটার ব্যতীত অন্য কোনও আচরণ নেই। এটা পাবলিক ক্ষেত্র ব্যবহার করতে গ্রহণযোগ্য যখন বর্গ শুধু একটি ডাটা স্ট্রাকচার প্রতিনিধিত্ব করে আর নেই, নেই এবং কখনো আচরণ (পাতলা getters এবং setters হয় থাকবে না এখানে আচরণ বিবেচিত)। এটি আরও ভালভাবে এভাবে লেখা যায়:
class Point {
public double x;
public double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
}
Point a = new Point(5.0, 4.0);
Point b = new Point(4.0, 9.0);
double distance = Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));
ক্লিন!
তবে মনে রাখবেন: কেবল আপনার শ্রেণীর আচরণের অনুপস্থিত থাকতে হবে তা নয়, ভবিষ্যতেও এর আচরণ করার কোনও কারণ নেই have
(এই ঠিক কি এই উত্তরটি বর্ণনা উদ্ধৃত করার জন্য। "জাভা ভাষা প্রোগ্রামিং জন্য কোড কনভেনশন: 10. প্রোগ্রামিং অভ্যাস" :
উপযুক্ত পাবলিক ইনস্ট্যান্স ভেরিয়েবলগুলির একটি উদাহরণ হল সেই ক্ষেত্রে যেখানে শ্রেণিটি মূলত কোনও ডেটা স্ট্রাকচার, কোনও আচরণ ছাড়াই। অন্য কথায়, আপনি যদি structক্লাসের পরিবর্তে (জাভা সমর্থিত struct) ব্যবহার করেন, তবে শ্রেণীর উদাহরণটি ভেরিয়েবলগুলি সর্বজনীন করা উপযুক্ত।
সুতরাং সরকারী নথিও এই অনুশীলন গ্রহণ করে।)
এছাড়াও, যদি আপনি অতিরিক্ত নিশ্চিত হন যে উপরের Pointশ্রেণির সদস্যগুলি পরিবর্তনযোগ্য হতে পারে, তবে আপনি finalএটি প্রয়োগের জন্য কীওয়ার্ড যুক্ত করতে পারেন:
public final double x;
public final double y;