簡體   English   中英

如何做一組通用值?

[英]How do I do a set of a generic value?

我定義了以下內容:

public class myClass<T> {
    private T value;

    protected <T> void setValue(T value) {
        if (value != null) // optional
            this.value = value;
    }
}

但是我得到一個編譯錯誤:

Type mismatch: cannot convert from T to T

(我知道,有用且合乎邏輯嗎?)。

設置此方法的正確方法是什么? 另請注意,簽名是在抽象 class 中設置的,如下所示:

@SuppressWarnings("hiding")
protected abstract <T> void setValue(T value);

你有兩種不相關的T類型。 在您的方法聲明中, <T>重新聲明了一個類型T ,隱藏了類級別的類型變量。

簡而言之,您不需要該方法是通用的,因為您希望setValue采用 class 上聲明的類型。 因為 type 參數在整個 class 中都可用,所以您的方法應該很簡單:

protected void setValue(T value) {
    if (value != null)
        this.value = value;
}

如果您的抽象 class 也是通用的,那么也需要對其進行相同的更正。 否則,您需要重新審視其設計,因為采用隨機輸入值的方法並不完全正確。

您已經在 class 級別定義了 T,如果您再次將其放入方法中,它將作為另一個 T。查看我在嘗試編譯代碼時收到的錯誤消息。

MyClass.java:6: error: incompatible types: T#1 cannot be converted to T#2
        this.value = value;
                     ^
  where T#1,T#2 are type-variables:
    T#1 extends Object declared in method <T#1>setValue(T#1)
    T#2 extends Object declared in class MyClass
1 error

只需刪除 T 的第二個聲明,它就會按預期編譯。

public class MyClass<T> {
    private T value;

    protected void setValue(T value) {
        if (value != null) {
            this.value = value;   
        }
    }
}

暫無
暫無

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

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