在Java 中使用泛型時,您可能會遇到需要限制泛型類別的類型以擴展特定的類型的情況。類別並實作特定的介面。雖然預期以下嘗試會成功似乎是合理的:
Class<? extends ClassA>
Class<? extends InterfaceB>
不幸的是,一次只能應用其中之一。那麼,我們要如何將這兩個限制結合起來呢?
事實上,可以使用以下方法在泛型類型參數中指定多個介面或一個類別和介面"&":
<T extends ClassA & InterfaceB>
這允許我們定義一個泛型類型,該類型僅限於擴展指定的類別並實現指定的類別介面。
例如,如果我們定義一個類ClassB和一個介面InterfaceC,我們可以建立一個泛型類,如下所示:
class MyClass<T extends ClassB & InterfaceC> { Class<T> variable; }
這樣就保證了MyClass的變數欄位只能儲存擴展ClassB 並實作InterfaceC 的類別的參考。
雖然此功能為定義泛型類型提供了靈活性,但它也可能導致複雜的聲明,如Collections#max 的JavaDoc 聲明所示:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
這種複雜性是出於對二進位相容性的考慮而產生的。但是,需要注意的是,這種複雜性主要是在定義泛型類別或方法時遇到的,而不是在聲明泛型變數時遇到的。
因此,要實現創建擴展特定類別的類別物件的目標,實現特定接口,您可以使用以下方法:
class classB { } interface interfaceC { } public class MyClass<T extends classB & interfaceC> { T variable; }
這將為您提供MyClass 變數欄位所需的限制。
以上是如何限制Java泛型類別同時擴充類別和實作介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!