是這兩個(有效)通用界限:有通用邊界「枚舉<T>與富」之間的差值「枚舉<延伸富?>」
<T extends Enum<T> & MyInterface>
<T extends Enum<? extends MyInterface>>
一樣嗎?
假設我有一個接口
interface MyInterface {
void someMethod();
}
而一些枚舉實現它:
enum MyEnumA implements MyInterface {
A, B, C;
public void someMethod() {}
}
enum MyEnumB implements MyInterface {
X, Y, Z;
public void someMethod() {}
}
我想要求的實現不僅使用MyInterface
而且它是一個枚舉。 「標準」 的方式是結合一個路口:
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);
}
而且這兩種情況下的約束按照上面的意圖和要求工作。
這兩個界限之間有什麼區別嗎?如果是這樣的話,哪一個比另一個「更好」?
如果他們是真正的理智,我寧願交點,因爲它不」 t使用通配符,我個人發現「不潔」 – Bohemian