我有應該接收到一個Class<A>
,類似的方法:傳遞Child.class作爲參數
protected void method(final Class<A> clazz) {
}
然後,當我試圖像method(A.class)
叫它做的工作,但如果我嘗試method(B.class)
,其中B
是子女A
,我收到消息「不兼容的類型」。
解決的辦法是改變Class<B>
,但我還有一個孩子的,我喜歡作爲參數傳遞給這個method()
,像C.class
。
我有應該接收到一個Class<A>
,類似的方法:傳遞Child.class作爲參數
protected void method(final Class<A> clazz) {
}
然後,當我試圖像method(A.class)
叫它做的工作,但如果我嘗試method(B.class)
,其中B
是子女A
,我收到消息「不兼容的類型」。
解決的辦法是改變Class<B>
,但我還有一個孩子的,我喜歡作爲參數傳遞給這個method()
,像C.class
。
一個解決方案是限定參數時使用有界通配符:
protected void method(final Class<? extends A> clazz) {
// Code here...
}
由此,你被允許通過直接A
的類或從A
延伸的任何類。
或者爲帕夫洛·建議:
protected <T extends A> void method(final Class<T> clazz) {
// Code here...
}
雙方將工作,但將有助於瞭解您打算如何處理clazz
這樣做,我們可以選擇一個比其他。
我會建議使用'protected
@PavloViazovskyy你指的是什麼泛型混亂?所有你可以在類「 extends A>」上調用的是生產者方法; (例如)'A instance = clazz.getInstance();'。 –
@AndyTurner。你是對的。這是我的錯誤。由於'Class'沒有使用消費者方法(以'T'作爲參數),所以使用_Jacob_最初建議的通配符版本就足夠了。 –
相關:[是列表列表的子類?爲什麼不是Java的泛型隱含多態?](http://stackoverflow.com/q/2745265) –
Pshemo