मेरे पास कुछ इंटरफेस हैं जिन्हें मैं भविष्य में लागू करने के लिए तीसरे पक्ष का इरादा रखता हूं, और मैं खुद को आधार कार्यान्वयन प्रदान करता हूं। मैं केवल उदाहरण दिखाने के लिए एक दो का उपयोग कर रहा हूँ।
वर्तमान में, वे के रूप में परिभाषित कर रहे हैं
आइटम:
public interface Item {
String getId();
String getName();
}
ItemStack:
public interface ItemStackFactory {
ItemStack createItemStack(Item item, int quantity);
}
ItemStackContainer:
public interface ItemStackContainer {
default void add(ItemStack stack) {
add(stack, 1);
}
void add(ItemStack stack, int quantity);
}
अब, Itemऔर ItemStackFactoryमैं भविष्य में इसका विस्तार करने के लिए किसी तीसरे पक्ष की आवश्यकता को पूरी तरह से दूर कर सकता हूं। ItemStackContainerभविष्य में भी विस्तारित किया जा सकता है, लेकिन उन तरीकों से नहीं जो मैं प्रदान कर सकता हूं, मेरे प्रदान किए गए डिफ़ॉल्ट कार्यान्वयन के बाहर।
अब, मैं इस पुस्तकालय को यथासंभव मजबूत बनाने की कोशिश कर रहा हूं; यह अभी भी प्रारंभिक अवस्था (प्री-प्री-अल्फा) में है, इसलिए यह ओवर इंजीनियरिंग (YAGNI) का एक कार्य हो सकता है। क्या यह जेनेरिक का उपयोग करने के लिए एक उपयुक्त स्थान है?
public interface ItemStack<T extends Item> {
T getItem();
int getQuantity();
}
तथा
public interface ItemStackFactory<T extends ItemStack<I extends Item>> {
T createItemStack(I item, int quantity);
}
मुझे डर है कि यह कार्यान्वयन को समाप्त कर सकता है और पढ़ने और समझने में अधिक कठिन हो सकता है; मुझे लगता है कि जहां भी संभव हो, नेस्टिंग जेनरिक से बचने की सिफारिश की है।