剛見面這段代碼:通用混淆:泛型超類中的類型在編譯時沒有定義?
public class Container <T extends Containter<T>> {
protected Map<String, Rule> inspect (T t) {
// ....
}
public boolean isValid() {
// ...
inspect ((T)this);
// ...
}
}
我感到困惑的是「的isValid」 - 方法。
當用inspect(this);
替換行也不會編譯:不兼容的類型:容器<Ť>不能轉換到T.
在不會發生錯誤的子類。所以我在問自己:this
是否屬於Container以外的其他類型?我的意思是在上面的代碼中this
的類型是什麼?明確的演員似乎是不必要的。
希望你們能理解我,我覺得很難用英文來解釋那些東西。
謝謝!
UPDATE
首先,感謝你並讓你等待遺憾。
對於檢查方法的意圖存在混淆。它應該在Container上工作(而不是在泛型類型上)。基本上只有Container的子類應該可以使用它。所以整個事情就是關於繼承。
這是關於使用檢查方法的子類的類型安全性。
想象(Container的檢查法內)像一個實例:現在
List<T> listOfSimilarContainers = new LinkedList<T>();
,如果有喜歡
public class SubContainer extends Container<SubContainer> { }
一個子上該類應該強制listOfSimilarContainers調用檢查檢查方法內只包含SubContainers。
這就是我想達到的。
這是指容器,其中爲'T'所指的內容是我的猜測。你會想檢查容器,或檢查容器的一個元素。如果你檢查容器本身,它不是'T'類型,就是'Container'類型。你會想說:'檢查(Container t)',然後調用它:'inspect(this);' –
Fallenreaper