Java中的泛型类型推断

时间:2012-08-31 11:29:09

标签: java generics

  

可能重复:
  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("");
}

1 个答案:

答案 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[]。您可能喜欢哪种交易类型会丢失。