调用Java泛型方法时能否仅指定部分类型参数?
Java泛型方法能否仅指定部分类型参数?
针对你提出的问题:Java中调用泛型方法时,原生语法不支持仅显式指定部分类型参数,无法直接写出<RetType = SpecificType>doSomething(...)这种形式。要么显式指定全部类型参数,要么完全依赖编译器自动推断。
不过可以通过以下几种替代方案解决编译器类型推断失败的问题:
方案1:使用泛型辅助方法
封装一个只绑定目标类型参数的辅助方法,让编译器自动推断其他参数:
// 辅助方法:固定RetType,E由调用时的instance参数自动推断 public static <RetType, E> RetType doSomethingForReturnType(E instance, String methodName, Object... params) { return DoSomethingClass.<E, RetType>doSomething(instance, methodName, params); }
调用时只需显式指定RetType,E会自动推断:
SpecificType result = DoSomethingClass.<SpecificType>doSomethingForReturnType(instance, "targetMethod", param1, param2);
方案2:添加类型令牌参数
修改原方法(或重载一个新方法),传入Class<RetType>类型的参数作为类型提示,让编译器通过该参数推断RetType:
// 重载后的方法,新增类型令牌参数 public static <E, RetType> RetType doSomething( E instance, String methodName, Class<RetType> returnTypeToken, Object... params ) { // 方法实现可利用returnTypeToken做类型校验或转换,原逻辑保持不变 ... }
调用时无需显式指定任何类型参数,编译器会自动推断E和RetType:
SpecificType result = DoSomethingClass.doSomething(instance, "targetMethod", SpecificType.class, param1, param2);
方案3:强制类型转换(不推荐)
如果不想修改原方法或新增辅助方法,可以通过强制转换告诉编译器返回值类型,但这种方式缺乏编译时类型检查,容易引发类型转换异常:
SpecificType result = (SpecificType) DoSomethingClass.doSomething(instance, "targetMethod", param1, param2);
内容的提问来源于stack exchange,提问作者DPA
相关产品推荐
相关产品推荐

