首頁 >Java >java教程 >如何在 Java 泛型中組合類別和介面界限?

如何在 Java 泛型中組合類別和介面界限?

Susan Sarandon
Susan Sarandon原創
2024-12-05 22:58:10533瀏覽

How Can I Combine Class and Interface Bounds in Java Generics?

Java 泛型:組合類別和介面邊界

在Java 中,泛型提供了定義可操作不同類型物件的類型的功能。當您想要建立一個在實作特定介面時限制為擴展特定類別的類別物件時,就會出現一個常見的挑戰。

讓我們考慮一個用例,我們想要建立一個 Class表示擴充 ClassA 並實作 InterfaceB 的類別的物件介面。

不能同時執行兩者?

最初,您可以嘗試使用以下通配符:

Class<? extends ClassA>

Class<? extends InterfaceB>

但是,使用其中任何一個都不允許您同時強制執行這兩個要求。

A解

實現這一目標的關鍵是在通配符中使用多個邊界。這種通配符的語法是:

<T extends Class & Interface>

將其應用到我們的場景中,我們得到:

Class<? extends ClassA & InterfaceB>

有界型參數

如Java 泛型中所述在教程中,您可以使用多個邊界來指定類型參數必須擴展給定的類別並實作一個或多個介面。使用 & 運算子分隔邊界。

複雜範例

雖然此解決方案可以讓您實現目標,但它可能會變得複雜。例如,考慮 Java 中的 Collections#max 方法,它具有以下聲明:

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)

這種複雜的語法確保二進位相容性,同時強制執行特定類型約束。

使用通用類別

在您的用例中,您可以建立一個具有所需的通用類別bounds:

public class MyClass<T extends ClassA & InterfaceB> {
    Class<T> variable;
}

此方法可讓您建立具有所需限制的變量,例如:

MyClass<ClassB>.variable

以上是如何在 Java 泛型中組合類別和介面界限?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn