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>
?
答案 0 :(得分:6)
<T>
告诉Java它是一个定义自己的类型参数的泛型方法,而不是依赖于为整个类定义的方法,例如。
public class Stuff<T> {}
答案 1 :(得分:2)
它根本没有帮助。
在呼叫站点,它允许您使用任何类型参数将结果分配给List
,这不是非常类型安全的。所有这些代码只会给你一种虚假的安全感。如果它返回,例如,List<String>
然后如您所写,您将被允许将该结果分配给List<Integer>
并且您不会知道您已经搞砸了很久以后(当您尝试时)并访问List
的一个元素并将其分配给Integer
),隐含的演员会在你脸上爆炸。
通常,如果泛型方法(例如,具有自己的类型参数与其成员的类别分开的方法)仅使用其类型参数一次和/或仅将其用于返回值,则完全浪费时间!
答案 2 :(得分:0)
这就是告诉java listAndCast是一个依赖于T类型的泛型方法。
旁注:我更喜欢这个实现这个问题,因为它更通用:
@SuppressWarnings("unchecked")
public <T> List<T> list_cast(List<?> orig) {
return (List<T>)orig;
}
答案 3 :(得分:0)
您不需要<T>
,但它会停止编译器警告。编译器将推断将返回List<Object>
(它没有关于将返回的类型的其他信息)。
它基本上与:
相同public static List listAndCast(Query query)
没有关于原始类型的警告。
如果传递的参数用<T>
参数化, <T>
可能会有用,例如:
public static <T> List<T> listAndCast(Query<T> query)