0
如果我寫這個函數:返回從一個普通的功能的專門的實現通用接口的無「未選中」警告
static <T> T getDefaultValue(Class<T> tClass) {
if(tClass == Integer.class) // or isAssignableFrom
return (T)Integer.valueOf(0);
...
}
我得到警告Type safety: Unchecked cast from Integer to T
,因爲仿製藥將被刪除。我可以用Class.cast
繞過它:
static <T> T getDefaultValue(Class<T> tClass) {
if(tClass == Integer.class)
return tClass.cast(Integer.valueOf(0));
...
}
但我不能找到一個方法來返回基於功能的通用參數泛型類型:
interface Thing<T> {...}
class ThingForInteger implements Thing<Integer> {...}
static <T> Thing<T> getThing(Class<T> tClass) {
if(tClass == Integer.class)
return [what?](new ThingForInteger());
...
}
有沒有辦法做到這一點,除了導致警告的演員?
(此外,有沒有一種方法,使一Map<Class<?>, Thing<[class from key]>>
,並從它那裏得到實現,而不必抑制警告?)
兩者都是不可能。泛型輸入在運行時被刪除,因此不存在'List .class',例如,只有'List.class'。 –
VGR
@VGR我正在尋求一種在編譯時以滿足編譯器的方式提供信息的方式,以免發出警告。這並不一定意味着使用「Thing .class」。 [實際上,編譯器應該足夠聰明,無論如何都不會發出警告,因爲return語句由一個要求類等於類的條件來保護] –
Random832