मेरे पास एक जावा प्रोग्राम है जो तृतीय पक्ष वर्ग फ़ाइलों को लोड करता है (कक्षाएं जिन्हें मैंने नहीं लिखा था) और उन्हें निष्पादित करता है। ये कक्षाएं अक्सर java.util.Random
का उपयोग करती हैं, जो डिफ़ॉल्ट रूप से यादृच्छिक प्रारंभिक बीज मान उत्पन्न करती है जब भी यह तत्काल हो जाती है। पुनरुत्पादन के कारणों के लिए, मैं इन कक्षाओं को हर बार एक ही प्रारंभिक बीज देना चाहता हूं, इसे केवल अपने विवेकानुसार बदलना चाहता हूं।मैं java.util.Random को तृतीय पक्ष वर्गों में एक विशिष्ट बीज कैसे दे सकता हूं?
यहाँ स्पष्ट समाधान में से कुछ हैं, और क्यों वे काम नहीं करते:
तीसरे पक्ष classfiles में एक अलग यादृच्छिक वर्ग का प्रयोग करें। यहां समस्या यह है कि मैं केवल वर्ग फ़ाइलों को लोड करता हूं, और स्रोत को संशोधित नहीं कर सकता।
JVM के संस्करण की बजाय अपनी खुद की यादृच्छिक कक्षा लोड करने के लिए कस्टम क्लासलोडर का उपयोग करें। यह दृष्टिकोण काम नहीं करेगा क्योंकि जावा क्लासलोडर्स को
java
पैकेज में कक्षाओं को ओवरराइड करने की अनुमति नहीं देता है।rt.jar के
java.util.Random
कार्यान्वयन को स्वयं के लिए कार्यान्वित करें, या फ़ाइलों को JVM के लिए विश्वसनीय स्थानों में डालें। इन दृष्टिकोणों को उनके मशीन पर जेवीएम इंस्टॉल के साथ एप्लिकेशन मैसेजिंग के उपयोगकर्ता की आवश्यकता होती है, और कोई अच्छा नहीं है।बूटक्लासपैथ में एक कस्टम
java.util.Random
कक्षा जोड़ना। हालांकि यह तकनीकी रूप से काम करेगा, इस विशेष आवेदन के लिए, यह अव्यवहारिक है क्योंकि यह एप्लिकेशन अंतिम उपयोगकर्ताओं को आईडीई से चलाने के लिए है। मैं ऐप को उपयोगकर्ताओं के लिए सुविधाजनक बनाना चाहता हूं, जिसका अर्थ है कि उन्हें बूटक्लासपैथ सेट करने के लिए मजबूर करना एक दर्द है। मैं एक स्क्रिप्ट में इस छिपा कर सकते हैं नहीं है, क्योंकि यह ग्रहण की तरह एक IDE से चलाया जा करने का इरादा है (आसान डिबगिंग के लिए।)
तो मैं यह कैसे कर सकते हैं?
चा बूटक्लासपैज को नजदीक करना प्रभावी है, लेकिन जावा प्रोग्राम चलाने के तरीके को संशोधित करने की आवश्यकता है। यह ठीक है अगर आप किसी प्रोग्राम को लॉन्च करने के तरीके को नियंत्रित कर सकते हैं, उदा। एक स्टार्टअप स्क्रिप्ट, लेकिन मेरे मामले में उपयोगकर्ता आमतौर पर एक आईडीई के भीतर से भागते हैं और इसे मैन्युअल रूप से करना होगा, जो कि अच्छा नहीं है। – adum