2016-02-22 34 views
6

में पैकेज समकक्ष दृश्यता संशोधक मैं एक प्रोग्राम लिख रहा हूं जिसमें मैं फैक्ट्री पैटर्न का उपयोग कर रहा हूं। मेरे पास एसेटफंड कैलकुलेटर नामक एक इंटरफ़ेस है और नामक एक वर्ग एसेटफंड कैलकुलेटर Impl जो इंटरफ़ेस लागू करता है।कोटलिन

AssetFundValidator वर्ग कुछ आदानों की पुष्टि करता है, और एक वैध AssetFundCalculatorImpl का दृष्टांत करने में सक्षम है।

मैं अगर कार्यक्रम के बाकी केवल AssetFundCalculatorImpl के बारे में नहीं इंटरफेस के बारे में पता होता है, और इसलिए है कि केवल AssetFundValidator यह दृष्टांत सकता है चाहते हैं,।

मेरे पैकेज संरचना इस तरह देख रहा है:

enter image description here

जावा में, मैं पैकेज AssetFundCalculatorImpl वर्ग के लिए दृश्यता संशोधक देना होगा, या यह निर्माता है, और यह इस मुद्दे को हल है, लेकिन में कोटलिन, कोई पैकेज दृश्यता संशोधक नहीं है।

क्या इसका कोई समाधान है? मैं इस कोड को अलग से संकलित मॉड्यूल में नहीं रखना चाहता, इसलिए आंतरिक संशोधक काम नहीं करेगा।

उत्तर

4

आप उसी फ़ाइल में AssetFundValidator और AssetFundCalculatorImpl डाल सकते हैं और AssetFundCalculatorImplprivate के रूप में चिह्नित कर सकते हैं। उस स्थिति में यह केवल उसी फ़ाइल में कोड के लिए पहुंच योग्य होगा, जिसमें AssertFundValidator शामिल है, लेकिन कार्यक्रम के अन्य हिस्सों में किसी भी कोड के लिए नहीं।

+0

बहुत साफ नहीं है, लेकिन कम से कम यह काम कर रहा है। – LordScone

+2

आखिरकार मैंने इस समाधान का उपयोग नहीं किया, मैं वास्तव में एक फ़ाइल में दो कक्षाओं को डालना पसंद नहीं करता। भाषा से पैकेज संशोधक को छोड़ने का कारण क्या था? – LordScone

+0

आपको एक से अधिक कक्षाओं को एक फ़ाइल में डालने के लिए उपयोग किया जाना चाहिए, यह कोटलिन में एक बहुत ही आम पैटर्न है। हमने पैकेज-स्थानीय दृश्यता शामिल नहीं की है क्योंकि यह कुछ भी छिपाने का एक अच्छा तरीका नहीं है: मॉड्यूल का उपयोगकर्ता उसी पैकेज में कक्षाएं बना सकता है जो मॉड्यूल उपयोग करता है और इस प्रकार उस मॉड्यूल के पैकेज-स्थानीय भागों तक पहुंच प्राप्त करता है। – yole