[英]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.