如果我定义了一个方法。
public static <T> T getSomeTea(Class<T> returnType) {
//do stuff and return a T
}
public static <T> T getSomeSpecialTea(T someVal) {
T someTea = (T) getSomeTea(someVal.getClass());
}
在getSomeSpecialTea中,为什么我需要从getSomeTea转换返回值。在我看来演员是不必要的,但也许我错过了一些重要的东西。
答案 0 :(得分:4)
Object.getClass()
不是通用的,因此您的代码是有效的:
public static <T> T getSomeSpecialTea(T someVal) {
Class<?> clazz = someVal.getClass();
T someTea = (T) getSomeTea(clazz);
}
那时你为什么需要演员更清楚? (当然,并不是演员在执行时会发生任何事情......)你并没有有效地调用<T>getSomeTea()
这是你真正想要的。
这只是Java泛型的另一个例子,有点痛苦:(
答案 1 :(得分:1)
对getClass()
返回类型的不幸删除会让很多人感到不安。
您可以使用返回未删除类型的实用程序方法
public static <T> Class<? extends T> myGetClass(T instance)
return (Class<? extends T>)instance.getClass();
public static <T> T getSomeSpecialTea(T someVal)
T someTea = getSomeTea( myGetClass(someVal) );