public static <T> List<T> listAndCast(Query query) {
@SuppressWarnings("unchecked")
List<T> list = query.list();
return list;
}在以下行中:
public static <T> List<T> listAndCast(Query query) {为什么我们需要<T>?
发布于 2012-03-20 17:05:53
<T>告诉Java它是一个泛型方法,它定义了自己的类型参数,而不是依赖于为整个类定义的参数,例如
public class Stuff<T> {}
发布于 2012-03-20 17:06:22
这并不是真正有帮助。
在调用点,它允许您将结果赋给具有任何类型参数的List,这不是非常安全的类型。所有这些代码只是给你一种错误的安全感。例如,如果它返回一个List<String>,那么你将被允许将结果赋值给List<Integer>,直到很久以后(当你试图访问List的一个元素并将其赋值给Integer时),你才会知道自己搞砸了,隐式强制转换就会在你面前爆炸。
一般来说,如果一个泛型方法(例如,一个拥有独立于它所属类的类型参数的泛型方法)只使用它的类型参数一次和/或只使用它作为返回值,那就完全是浪费时间!
发布于 2012-03-20 17:06:25
这就是告诉java listAndCast是一个依赖于T类型的泛型方法。
附注:我更喜欢这个问题的实现,因为它更通用:
@SuppressWarnings("unchecked")
public <T> List<T> list_cast(List<?> orig) {
return (List<T>)orig;
}https://stackoverflow.com/questions/9783858
复制相似问题