छद्म-कोडपास निरंतर वर्ग और यह
प्रदान की के टुकड़े की दुकान छद्म-कोड के रूप में लिया जा सकता है। यदि इस समस्या को हल करने के लिए मानक तरीका है तो मैं एक अलग समाधान के लिए खुला हूं।
यह उम्मीद उपयोग के बारे में है:
कुछ स्पष्टीकरण:
- एक, और केवल एक ही विन्यास आवेदन प्रति इस्तेमाल किया जाएगा। रनटाइम के दौरान इसे बदला नहीं जाएगा।
Main.java
@Override
की अनुमति नहीं दे सकता।Configuration.java
Interface
नहीं हो सकता है क्योंकि डिफ़ॉल्ट मान फ़ील्ड को ओवरराइड नहीं किया जाना चाहिए।Configuration.java
अपने दो मौजूदा क्षेत्रों से काफी हद तक बढ़ेगा। साथ काम करने के लिए बिल्डर-पैटर्न बहुत गन्दा प्रस्तुत करना।
Configuration.java
public class Configuration
{
public static int getFoo() { return 1; }
public static int getBar() { return 2; }
}
UserDefinedConfiguration.java
public class UserDefinedConfiguration extends Configuration
{
@Override
public static int getFoo() { return 3; }
}
Main.java
public final class Main {
private final Configuration config;
// default configuration
public Main() {
this (Configuration.class);
}
// user-defined configuration
public Main (Class<? extends Configuration> config) {
this.config = config;
}
// dummy-test
public void printFoo() {
System.out.println(config.getFoo());
}
}
अब मुख्य प्रश्न के लिए, इसे कैसे पूरा किया जाए? यदि नहीं (या Configuration
पारित किया गया है) getFoo()
1
वापस करना चाहिए, यदि UserDefinedConfiguration
पारित किया गया है तो 3
।
इसे पूरा करने का एक तरीका Configuration
का उदाहरण संग्रहीत करना है। हालांकि, यह अनावश्यक लगता है जब सभी गेटर्स static
हैं। यह static
के रूप में नहीं होने के लिए बहुत अधिक समझ में नहीं आता है।
नोट: This is taken into account.
'यह नहीं है खास मतलब उन्हें स्थिर either.' नहीं करने के लिए:
Configuration
तो एक इंटरफेस हो सकता है? आप अलग-अलग कॉन्फ़िगरेशन सेट रखना चाहते हैं और मुझे लगता है कि आप केवल एक बार प्रत्येक कॉन्फ़िगरेशन सेट बनाते हैं, इसलिए गैर-स्थैतिक विधियों (यदि बिल्कुल) के "ओवरहेड" और आपकी कॉन्फ़िगरेशन के एक उदाहरण के निर्माण से कोई फर्क नहीं पड़ता। और आप स्वचालित समाधान के साथ स्वचालित रूप से '@ ओवरराइड 'प्राप्त करते हैं। –क्योंकि यह एकाधिक 'कॉन्फ़िगरेशन' रखने का कोई अर्थ नहीं बनाता है। विधियां सीधे 'कॉन्फ़िगरेशन' से संबंधित हैं। मैं वास्तव में "ओवरहेड" के बारे में चिंतित नहीं हूं। – Emz
क्या कॉन्फ़िगरेशन मान कोड में रहने की आवश्यकता है? एक विकल्प संपत्ति फ़ाइलों या हैश मैप्स का पदानुक्रम बनाना होगा जहां मूल्यों को बाद में पढ़ा जाएगा पिछले मूल्यों को ओवरराइड करें। तब आपको विरासत को वर्ग/इंटरफेस के रूप में मॉडल करने की आवश्यकता नहीं होगी। बस अटकलें, शायद मैं पूरी तरह से प्रश्न को गलत समझता हूं ... –