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.