从泛型函数返回泛型接口的专用实现而不"unchecked"警告



如果我写这个函数:

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]>>并从中获取实现,而不必禁止显示警告?

AFAIK,这足以没有警告:

static <T> Thing<T> getThing(Class<T> tClass) {
    if (tClass == Integer.class) {
        return (Thing) new ThingForInteger();
    }
    ...

最新更新