【发布时间】:2015-02-17 09:49:58
【问题描述】:
考虑这样的通用方法定义:
public static <T> T getParameter(final Context context, final ContextParameter contextParameter, final Class<T> clazz) {
return (T) context.get(contextParameter.name());
}
在您尝试像 List
final List<String> fileNames =
(List<String>) ContextUtils.getParameter(context,
ContextParameter.EOF_FILE_NAMES_TO_ZIP, List.class);
但这需要额外的演员表,从而消除了拥有该方法的目的。有没有办法能够提供List<String>.class 或类似于该方法的东西? (我知道类型擦除会阻止 List<String> 存在,但也许有办法做到这一点。
注意:要让它工作,我的意思是没有类型安全警告。我知道代码可以按原样工作,但它不是类型安全的。
【问题讨论】:
-
不是类型安全的方式。但这会工作
List<String> parameter1 = getParameter(List.class); -
为什么需要投射?我在没有演员表的情况下尝试了它,我得到的只是关于类型安全的警告。
-
@AndreiVajnaII 我想要一种类型安全的方式 ;-)。
-
在我看来,您所做的对于 Class 来说不再是类型安全的了。在您的示例中,除了推断泛型方法的类型之外,您没有使用 Class 。方法外的强制转换表达式与泛型将被编译成的完全一样。
标签: java generics type-erasure