我设计了一个泛型方法,使数组更改类型后返回
结果显示异常:class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.Integer;
实际上返回的是Object[]类型,请问应该如何改正?
测试代码:
String[] cs3 = new String[] { "123", "321" };
Integer[] cs3s = convert(cs3, Integer[].class);
System.out.println(Arrays.toString(cs3s));
List<Boolean> list4 = new ArrayList<>();
list4.add(true);
list4.add(false);
Boolean[] list4s = convert(list4, Boolean[].class);
System.out.println(Arrays.toString(list4s));
方法代码:
public static T convert(@NotNull Object obj, Class itemClass) {
if (obj.getClass() == itemClass) return (T) obj;
String itemClassName = itemClass.getName();
if (itemClassName.startsWith("[")) {
if (itemClassName.charAt(1) == 'L') {
try {
Class clazz = Class.forName(itemClassName.substring(2, itemClassName.length() - 1));
Constructor type = getConstructor(clazz, "java.lang.String");
if (type == null) throw new TypeException("不支持的转换类型");
if (obj instanceof Collection) {
List
自己已解决,以下代码,泛型数组即可返回指定数组类型:
Object[] objs = obj instanceof Collection ? ((Collection<?>) obj).toArray() : (Object[]) obj;
Class<?> clazz = itemClass.getComponentType();
Object array = Array.newInstance(clazz, objs.length);
Object[] arrays = (Object[]) array;
List<Object>
改为
List<T>
既然你要写泛型,那么你操作的每一步都应该基于泛型,而不是类型转换来转换去
否则你不如直接返回arraylist而不要返回什么泛型