2011-09-28 83 views
4

如果我有一个方法定义。为什么我需要在这种情况下演员阵容?

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()); 
} 

in getSomeSpecialTea,为什么我需要从getSomeTea强制返回。在我看来演员并不需要,但也许我错过了一些重要的东西。

回答

4

Object.getClass()是不是通用的,所以你的代码是有效的:

public static <T> T getSomeSpecialTea(T someVal) { 
    Class<?> clazz = someVal.getClass(); 
    T someTea = (T) getSomeTea(clazz); 
} 

在这一点上是说得清楚为什么你需要投? (不是说演员在演出时真的会有什么事情,当然......)你不打电话<T>getSomeTea()这就是想让有效地做的事情。

这是Java泛型是一个有点疼痛:(中的另一种情况下

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)); 
相关问题