我的代码:即使我知道它正确返回,为什么我必须转换为泛型类型T?
private static <T> T get(Class<T> clazz) throws IllegalAccessException, InstantiationException {
if (clazz.equals(String.class)) {
return (T) new String("abc");//line x
} else {
return clazz.newInstance();
}
}
正如你看到的,在line x
,T
必须String.class
并返回String
。但编译失败而不会将结果投射到T
。
变化line x
变为return new String("abc");
结果Incompatible types
。
这实际上不是模板的意思。当然,对你来说显然它会一直返回类型T的东西 - 但是编译器很明显吗?如果T不是字符串,仍然有一些途径(可以访问或不可访问)返回错误的类型。 – JArkinstall