我有一種方法,我想接受必須擴展抽象類的類類型。是什麼Java泛型 - 方法簽名的上限
<T extends AbstractClass> void myMethod(Class<T> clazz);
和
void myMethod(Class<? extends AbstractClass> clazz);
之間的區別?
我不能在第二種情況下直接引用方法中的類型。這兩種方法可以傳遞哪種類型有什麼區別?
我有一種方法,我想接受必須擴展抽象類的類類型。是什麼Java泛型 - 方法簽名的上限
<T extends AbstractClass> void myMethod(Class<T> clazz);
和
void myMethod(Class<? extends AbstractClass> clazz);
之間的區別?
我不能在第二種情況下直接引用方法中的類型。這兩種方法可以傳遞哪種類型有什麼區別?
不,與您提供的兩個方法簽名兼容的參數類型之間沒有區別。就個人而言,如果我需要引用參數表示的確切類型,我會使用參數化版本,但除此之外,我會使用通配符版本。
在第一個1,你也將能夠返回T(或任何類型的參數與T:列表<牛逼>,設置<牛逼> ...等),而無需將其丟
<T extends AbstractClass> T myMethod(Class<T> clazz);
而且使用它作爲:
Subclass parameterInstance =...
Subclass i1 = myMethod(parameterInstance.getClass());
@prudhvi,''是一個(有界)的類型參數,使得泛型方法的整體聲明成爲可能。這與作爲泛型類的方法不同。 –
@JohnBollinger我認爲它應該是 myMethod(Class clazz); 或 void myMethod(Class clazz); 我對不對? –
Prudhvi
*「我是對嗎?」*不,你不是。類型參數不會替換返回類型。 – Tom