3 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
錯(cuò)誤消息說(shuō)明了一切。在運(yùn)行時(shí),該類型已消失,無(wú)法對(duì)其進(jìn)行檢查。
您可以通過(guò)為對(duì)象創(chuàng)建工廠來(lái)捕獲它,如下所示:
public static <T> MyObject<T> createMyObject(Class<T> type) {
return new MyObject<T>(type);
}
然后在對(duì)象的構(gòu)造函數(shù)中存儲(chǔ)該類型,變量,以便您的方法如下所示:
if (arg0 != null && !(this.type.isAssignableFrom(arg0.getClass()))
{
return -1;
}

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您的類擴(kuò)展了具有通用參數(shù)的類,則您還可以在運(yùn)行時(shí)通過(guò)反射來(lái)獲取它,然后將其用于比較,即
class YourClass extends SomeOtherClass<String>
{
private Class<?> clazz;
public Class<?> getParameterizedClass()
{
if(clazz == null)
{
ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();
clazz = (Class<?>)pt.getActualTypeArguments()[0];
}
return clazz;
}
}
在上述情況下,在運(yùn)行時(shí)將從getParameterizedClass()中獲取String.class并進(jìn)行緩存,因此在進(jìn)行多次檢查時(shí)不會(huì)有任何反射開(kāi)銷。請(qǐng)注意,您可以從ParameterizedType.getActualTypeArguments()方法中通過(guò)索引獲取其他參數(shù)化類型。
添加回答
舉報(bào)