簡體   English   中英

在 Java 語法中,類<? extends Something>

[英]in Java syntax, Class<? extends Something>

Class<? extends Something>

這是我的解釋,它是類模板,但是類 ? 意味着類的名稱未確定,它擴展了Something類。

如果我的解釋有問題,請告訴我。

這里有一些令人困惑的答案,所以我會嘗試澄清這一點。 您可以這樣定義泛型:

public class Foo<T> {
    private T t;
    public void setValue(T t) {
        this.t = t;
    }
    public T getValue() {
        return t;
    }
}

如果您希望 Foo 上的泛型始終擴展類 Bar 您可以將其聲明為:

public class Foo<T extends Bar> {
    private T t;
    public void setValue(T t) {
        this.t = t;
    }
    public T getValue() {
        return t;
    }
}

? 在聲明變量時使用。

Foo<? extends Bar>foo = getFoo();

或者

DoSomething(List<? extends Bar> listOfBarObjects) {
    //internals
}

你幾乎是對的。 基本上,Java 沒有模板的概念(C++ 有)。 這稱為泛型。 這定義了一個泛型類Class<> ,泛型的屬性是Something任何子類。

如果您想了解模板和泛型之間的區別,我建議您閱讀“ C++ 和 Java 中的“泛型”類型之間有什么區別? ”。

你是對的

定義是該類必須是Something的子類型

它與Class<T>相同,但有一個條件,即T必須像 Anthony Accioly 建議的那樣extends Somethingimplements Something

它也可以是類Something本身

你是對的。

在 Java 泛型中, ? 運算符的意思是“任何類”。 extends關鍵字可用於將其限定為“任何擴展/實現Something (或Something )的類。

因此,你有“ Class的一些類,但這個類必須是或擴展/實現Something ”。

你是對的。

然而,通常你會想要命名擴展Something的類並編寫例如<E extends Something> 如果你使用? 你以后不能對給定的類型做任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM