Java中的泛型类型推理

Java中的泛型类型推理,java,generics,Java,Generics,可能重复: 以下代码在运行时失败,无法从类型变量中选择。是否有任何方法可以不必将类型作为参数传递(类类型) publicstatice[]parseDealsFromJSON(字符串体){ parser.fromJson(body,E[].class);//此处失败 } 公共静态void main(字符串[]args){ SubDeal[]deals=parseDealsFromJSON(“”); } 问题在于,=的右侧尺寸不知道您想要的左侧是什么类型。i、 java不做这种类型的推理 方法

可能重复:

以下代码在运行时失败,
无法从类型变量中选择。是否有任何方法可以不必将类型作为参数传递(
类类型

publicstatice[]parseDealsFromJSON(字符串体){
parser.fromJson(body,E[].class);//此处失败
}
公共静态void main(字符串[]args){
SubDeal[]deals=parseDealsFromJSON(“”);
}

问题在于,
=
的右侧尺寸不知道您想要的左侧是什么类型。i、 java不做这种类型的推理

方法不知道需要返回类型是什么类型。(我看到MethodHandles在运行时出现异常,我怀疑Java 8或9可能会引入这些特性)

e、 g.返回类型的非常基本的类型推断不是在运行时(或编译时)完成的



使用泛型,您可以获得额外的类型擦除功能。这意味着运行时
E[]
实际上是
Deal[]
。您可能喜欢的交易类型已丢失。

简短答案;不,问题是这样的
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("");
}
public Double getValue() {
    return 5.0;
}

double d = m.getValue(); // not smart enough to avoid creating a `Double` here.