मैं इस दो अंतरफलक और वर्गों की है। लेकिन मेरी राय में जेनेरिक रिपोजिटरी (के) में दूसरा सामान्य पैरामीटर अनावश्यक है। क्योंकि मुझे पता है कि MyEntity एक पहचान है, मुझे लगता है कि यह बहुत अच्छा होगा यदि मैं अंत में इस तरह उपयोग कर सकते हैं होगा:बेमानी सामान्य मापदंडों
public class MyService {
private GenericRepository<MyEntity> myEntityRepository;
}
लेकिन मैं सफल होने के बिना अलग अलग चीजें कोशिश कर रहा हूँ। क्या यह संभव है? यदि नहीं, तो क्यों नहीं?
अद्यतन: कुछ प्रतिक्रियाओं का उत्तर दें। मुझे लगता है कि कंपाइलर कुछ जानता है कि किस प्रकार मायनेटीटी में सामान्य है। उदाहरण के लिए:
public class MyEntityGenericRepository implements GenericRepository<MyEntity, Long> {
// compiles...
}
public class MyEntityGenericRepository implements GenericRepository<MyEntity, String> {
// compiler says: "Bound mismatch: The type MyEntity is not a valid substitute for the bounded parameter <T extends Identifiable<K>> of the type GenericRepository<T,K>"
}
धन्यवाद हो सकता है अन्य कर सकते हैं, की तुलना में एक अंतरफलक है कि बस GenericRepository
तब को परिष्कृत पेश करते हैं, लेकिन मैं सहमत नहीं हूँ । कृपया, मेरा संपादन देखें। – sinuhepop
@sinuhepop, निश्चित रूप से संकलक यह जांच सकता है कि 'पहचानकर्ता' में टाइप पैरामीटर के वास्तविक प्रकार के 'के' मैचों का मिलान किया गया है। फिर भी, आपको एक सामान्य प्रकार पैरामीटर होने के लिए * के * घोषित करने की आवश्यकता है (और इसके परिणामस्वरूप, तत्कालता के बिंदु पर अपना वास्तविक मान पास करें)। यह सिर्फ भाषा काम करता है। आप सही हैं कि इस ज्ञान * सिद्धांत में संकलक द्वारा अनुमानित किया जा सकता है, लेकिन यह अभी के लिए नहीं है, और कई सालों तक ... यदि कभी (दुर्भाग्यवश, जावा का विकास केवल उस दिशा में बहुत धीरे-धीरे चल रहा है। ..)। –