मैं एक निर्माता पैटर्न बनाने की कोशिश कर रहा हूं जो कुछ तरीकों पर प्रकार की जांच प्रदान करने के लिए जेनेरिक का उपयोग करता है।एनम और बिल्डर पैटर्न से जेनेरिक प्रकार
ParameterBuilder.start(String.class).setName("foo").setDefaultValue("Hello").build();
ParameterBuilder.start(Integer.class).setName(bar).setDefaultValue(42).build();
ParameterBuilder.start(Boolean.class).setName(bar).setDefaultValue(false).build();
कोड का उपयोग करना:: वर्तमान में मैं अगले कार्य है
public class ParameterBuilder<T> {
private String name;
private T defaultValue;
public static <T2> ParameterBuilder<T2> start(Class<T2> type) {
return new ParameterBuilder<T2>();
}
// Other methods excluded for example
}
तो setDefaultValue
विधि के लिए निवेश के प्रकार क्या start
विधि में पारित कर दिया है द्वारा परिभाषित किया गया है, बस के रूप में मैं चाहता हूँ।
लेकिन अब मैं थोड़ी अधिक जानकारी रखने के लिए start()
में क्या हो रहा है, इसे विस्तारित करना चाहता हूं। अनिवार्य रूप से मैं अपने द्वारा बनाए गए पैरामीटर के लिए "प्रकार" में गुजरना चाहता हूं। कभी कभी इन मानकों "ईमेल", "Url" आदि डिफ़ॉल्ट मान अभी भी एक ज्ञात प्रकार (उन मामलों में स्ट्रिंग) की होगी जैसी चीजों के लिए किया जाएगा, इसलिए मैं कुछ ऐसा करना चाहते हैं:
ParameterBuilder.start(EMAIL).setName("email").setDefaultValue("[email protected]").build();
ParameterBuilder.start(URL).setName("website").setDefaultValue("http://www.somewhere.com").build();
फिलहाल EMAIL & यूआरएल एनम्स हैं, जिसमें अन्य चीजों के साथ - डिफ़ॉल्ट मान की कक्षा है। लेकिन अगर मैं इस मार्ग पर जाता हूं, तो मैं पैरामीटर बिल्डर को कैसे चालू करूं?
public static <T2> ParameterBuilder<T2> start(ParameterType paramType) {
Class<T2> type = paramType.getTypeClass();
// How do I instantiate my ParameterBuilder with the right type?
}
यह enums (जो मैं मामले जा रहा है देख सकते हैं) का उपयोग नहीं किया जा सकता है, तो किसी को भी एक अलग समाधान के लिए एक सुझाव है?
आप दिखा सकते हैं वास्तव में क्या 'EMAIL',' URL' है। क्या वे 2 अलग-अलग enums हैं? क्या वे दो enums के उदाहरण हैं? वे क्या हैं? –
मेरे मामले में, मेरे पास पैरामीटर टाइप टाइप था जैसे: 'सार्वजनिक enum पैरामीटर टाइप {STRING (स्ट्रिंग.क्लास, "स्ट्रिंग"), इंटेगर (इंटीजर.क्लास, "इंटीजर"), मल्टीलाइन (स्ट्रिंग.क्लास, "मल्टीन टेक्स्ट"), एचटीएमएल (स्ट्रिंग.क्लास, "एचटीएमएल"), दिनांक (दिनांक.क्लास, "तिथि"), बुलेन (बूलियन.क्लास, "बूलियन"); // विधियों का पालन किया ' –