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));
कक्षा में सादे गेटर्स और सेटर के अलावा कोई व्यवहार नहीं है। सार्वजनिक फ़ील्ड का उपयोग करने के लिए यह स्वीकार्य है जब वर्ग सिर्फ एक डेटा संरचना का प्रतिनिधित्व करता है, और उसके पास नहीं है, और कभी भी व्यवहार नहीं होगा (पतले गेटर्स और बसने वालों को यहां व्यवहार नहीं माना जाता है)। इसे इस तरह से बेहतर लिखा जा सकता है:
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));
स्वच्छ!
लेकिन याद रखें: न केवल आपके वर्ग को व्यवहार से अनुपस्थित होना चाहिए, बल्कि इसके साथ ही भविष्य में भी व्यवहार का कोई कारण नहीं होना चाहिए ।
(यह वास्तव में क्या है इस उत्तर का वर्णन शब्दों में। "जावा भाषा प्रोग्रामिंग के लिए कोड कन्वेंशनों: 10 प्रोग्रामिंग आचरण" :
उपयुक्त सार्वजनिक उदाहरण चर का एक उदाहरण वह मामला है जहां वर्ग अनिवार्य रूप से डेटा संरचना है, जिसमें कोई व्यवहार नहीं है। दूसरे शब्दों में, यदि आपने structएक वर्ग के बजाय (यदि जावा समर्थित है struct) का उपयोग किया होता, तो यह वर्ग के उदाहरण चर को सार्वजनिक करने के लिए उपयुक्त है।
इसलिए आधिकारिक प्रलेखन भी इस प्रथा को स्वीकार करता है।)
इसके अलावा, अगर आपको अतिरिक्त यकीन है कि उपरोक्त Pointवर्ग के सदस्यों को अपरिवर्तनीय होना चाहिए, तो आप finalइसे लागू करने के लिए कीवर्ड जोड़ सकते हैं :
public final double x;
public final double y;