यहाँ कोड का एक टुकड़ा है:क्या जावा में एक कॉन्स संदर्भ समतुल्य है?
//Game board is made up of Squares. A player can place GamePieces on a Square.
public class CheckersBoard
{
public boolean PlaceGamePiece(GamePiece gamePiece, int nRow, int nColumn) {
return m_theGameBoard[nRow][nColumn].PlaceGamePiece(gamePiece);
}
private Square[][] m_theGameBoard;
}
Let कहते हैं कि मैं PlaceGamePiece विधि का परीक्षण कर रहा हूँ (JUnit का प्रयोग करके) और मैं m_theGameBoard तक पहुँचने के लिए तो मैं इस पर गौर करें और सत्यापित करें GamePiece सही पर रखा गया था कर सकते हैं की जरूरत है स्क्वायर और सही डेटा है।
C++ में मैं या तो एक दोस्त तो यह निजी सदस्य m_theGameBoard पहुँच सकते हैं चाहते हैं परीक्षण वर्ग, या मैं एक समारोह है कि एक स्थिरांक gameboard कि बदला नहीं जा सकता रिटर्न होगा (क्योंकि यह स्थिरांक है):
const GameBoard& GetGameBoard() const { return m_theGameBoard; }
अब मैं जो भी जांच कर रहा हूं वह खेल बोर्ड पर करना चाहता हूं, लेकिन मैं खेल बोर्ड को संशोधित नहीं कर सकता क्योंकि यह स्थिर है।
जावा रिटर्निंग कॉन्स संदर्भ या मित्र वर्गों का समर्थन नहीं करता है। तो मेरा सवाल यह है कि ऐसा करने का मानक जावा तरीका क्या है ?? क्या मुझे केवल एक्सेसर्स प्राप्त करने का एक गुच्छा प्रदान करना है जो मुझे Square
पर डेटा की जांच करने की अनुमति देता है?
अद्यतन: मैंने कैलेब ब्रसे के सुझाव के रूप में गेटपीस विधि लिखना समाप्त कर दिया।
public GamePiece GetGamePiece(Point pt) {
return new GamePiece(m_theGameBoard[pt.GetRow()][pt.GetColumn()]);
}
नोटिस मैं एक नया गेमपीस ऑब्जेक्ट बनाता हूं और उसे वापस करता हूं। मैं GameBoards आंतरिक संदर्भ वापस नहीं कर रहा हूं, इसलिए कोई भी गेमबोर्ड को संशोधित नहीं कर सकता क्योंकि उनके पास केवल एक प्रति है! अच्छा! मदद लोगों के लिए धन्यवाद, कुछ वाकई अच्छी सलाह है।
एफवाईआई: जब मैं उन्हें यहां पोस्ट करता हूं तो मैं ऑब्जेक्ट्स के नाम बदलता रहता हूं, क्षमा करें अगर वह किसी को भ्रमित कर देता है।
मैं इस धारणा के तहत हूं कि संरक्षित सी के दोस्त जैसा ही है। – Karl
लेकिन यदि बोर्ड के साथ काम करने वाली कक्षा बोर्ड पर सभी टुकड़ों को प्रदर्शित करने की आवश्यकता है (जैसे कि एक जीयूआई कक्षा जिसे बोर्ड पर सभी टुकड़े प्रदर्शित करने की आवश्यकता होती है) - आप टुकड़े पाने के तरीके के बिना इसके बारे में कैसे जाएंगे? मेरे शतरंज ऐप में मेरे पास 'बोर्ड.pieceOn (स्क्वायर)' विधि है जो किसी टुकड़ा को मौजूद करती है, यदि कोई टुकड़ा मौजूद है, या स्क्वायर खाली है तो शून्य। टुकड़े टुकड़े करने वाले कब्जे वाले स्क्वायर का नक्शा वापस लौटाना बेहतर होगा? –
http://www.javaworld.com/javaworld/jw-01-2004/jw-0102-toolbox.html ग्राफिक्स संदर्भ दिए गए ऑब्जेक्ट्स क्यों नहीं हैं, स्वयं को आकर्षित करें? टुकड़ों में एक 'ड्रा' विधि जोड़ें (या प्रत्येक टुकड़े का सबक्लास, यदि आप यूआई कोड को अलग रखना पसंद करते हैं)। मुझे लगता है कि 'board.draw (ग्राफिक्स)' और 'piece.draw (ग्राफिक्स) 'सही समझ में आता है। इसे लिंक में उल्लिखित होल्ब की तकनीक के साथ संयोजित करें और आपके पास एक अच्छा समाधान है जो ब्रेकिंग इंकैप्यूलेशन से बचाता है। –