इन दोनों (वैध) सामान्य सीमा हो:वहाँ सामान्य सीमा "Enum <T> और फू" और के बीच एक अंतर है "Enum <फैली फू?>"
<T extends Enum<T> & MyInterface>
<T extends Enum<? extends MyInterface>>
एक ही?
मान लीजिए मैं एक अंतरफलक
interface MyInterface {
void someMethod();
}
और कुछ enums कि इसे लागू:
enum MyEnumA implements MyInterface {
A, B, C;
public void someMethod() {}
}
enum MyEnumB implements MyInterface {
X, Y, Z;
public void someMethod() {}
}
और मैं एक कार्यान्वयन का उपयोग करता है MyInterface
न केवल एक बल्कि यह है कि आवश्यकता करना चाहते हैं एक enum है "मानक" जिस तरह से एक चौराहे बाध्य कर रहा है:
static class MyIntersectionClass<T extends Enum<T> & MyInterface> {
void use(T t) {}
}
लेकिन मुझे पता चला है कि यह काम करता है:
static class MyWildcardClass<T extends Enum<? extends MyInterface>> {
void use(T t) {}
}
ऊपर के साथ
, इस संकलित:
public static void main(String[] args) throws Exception {
MyIntersectionClass<MyEnumA> a = new MyIntersectionClass<MyEnumA>();
a.use(MyEnumA.A);
MyWildcardClass<MyEnumB> b = new MyWildcardClass<MyEnumB>();
b.use(MyEnumB.X);
}
और बाध्य काम करता है और इरादे से दोनों मामलों के लिए आवश्यक है।
क्या इन दो सीमाओं के बीच कोई अंतर है, यदि ऐसा है, और दूसरे की तुलना में एक "बेहतर" है?
वे सही मायने में समझदार हैं, क्योंकि यह 'नहीं करता है मैं चौराहे पसंद करते हैं वाइल्डकार्ड का उपयोग नहीं करते, जिसे मैं व्यक्तिगत रूप से "अशुद्ध" – Bohemian