Java实现通用InArray泛型方法及基础类型数组调用报错解决
报错根本原因
Java泛型仅支持引用类型,不支持char、int这类基本类型。你定义的泛型方法入参要求是引用类型数组T[],但调用时传入的char[]是基本类型数组,无法匹配泛型参数规则,因此触发类型不匹配报错。
可行解决方法
方案1:替换为包装类数组适配现有泛型方法
将基本类型数组替换为对应包装类数组即可直接调用原有泛型方法,char对应的包装类是Character:
// 把char[]改为Character[] Character[] arr = {'a', 'b', 'c'}; if (InArray(arr, 'c')) { // 存在于数组中 }
注意:原有泛型方法中使用
==判断相等,仅能匹配对象地址,若要按值判断、同时避免空指针异常,建议将判断逻辑修改为:if (java.util.Objects.equals(needle, array[i]))
方案2:重载基本类型专用方法,无需修改原有调用代码
如果不想改动已经写好的基本类型数组逻辑,可以针对8种基本类型单独重载对应版本的InArray方法,比如char版本:
public static boolean InArray(char[] array, char needle) { for (char c : array) { if (c == needle) { return true; } } return false; }
重载后你原有调用InArray(arr, 'c')的代码不需要做任何修改即可正常运行。
内容的提问来源于stack exchange,提问作者O'Niel
相关产品推荐
相关产品推荐

