可能重复:
Determining the Type for a generic method parameter at runtime
Generics in static methods
下面的代码在运行时因cannot select from a type variable
而失败。有没有办法这样做而不必将类型作为参数传递(Class<E[]> type
)?
public static <E extends Deal> E[] parseDealsFromJSON(String body) {
parser.fromJson(body, E[].class); // fails here
}
public static void main(String[] args) {
SubDeal[] deals = parseDealsFromJSON("");
}
答案 0 :(得分:2)
问题是=
的右手大小不知道你想要的左侧是什么类型。即java不会进行这种类型推断。
方法不知道返回类型需要什么类型。 (我在运行时遇到过使用MethodHandles的异常,我怀疑Java 8或9可能会引入这些功能)
e.g。返回类型的非常基本的类型推断不是在运行时(或编译时)完成的
public Double getValue() {
return 5.0;
}
double d = m.getValue(); // not smart enough to avoid creating a `Double` here.
使用Generics,你可以获得类型擦除的额外好处。这意味着E[]
在运行时实际上是Deal[]
。您可能喜欢哪种交易类型会丢失。