Java引用类型 Java类型转换疑惑
2017-10-12 14:29
120 查看
关于网友提出的“Java引用类型 Java类型转换疑惑”问题疑问,本网通过在网上对“Java引用类型 Java类型转换疑惑”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:Java引用类型 Java类型转换疑惑
描述:
通过反射调用方法,需要传入方法需要的参数:
我写了一个方法,type 表示参数的类型,values 是参数对应的值。本来是这么写的:
如果type是数组,则创建Object数组,但是这样造成的问题就是通过反射调用时,如果方法需要String类型的数组,这里给的Object类型的数组,则会报错:
这样是可以的,但是总觉得这样不是好的方式,因为太多的相似代码了,但是又苦于不知道如何处理。如果能方便,希望可以提供思路,谢谢大家!
问题:Java引用类型 Java类型转换疑惑
描述:
通过反射调用方法,需要传入方法需要的参数:
public Object invoke(Object obj, Object... args)
我写了一个方法,type 表示参数的类型,values 是参数对应的值。本来是这么写的:
/** * 类型转换 * @param type * @param values * @return */ private static Object transform(Class<?> type, String[] values) { if(type.isArray()) { Class<?> clazz = type.getComponentType(); Object [] params = new Object[values.length]; //这里有问题! for (int i = 0; i < values.length; i++) { params[i] = typeTransform(clazz, values[i]); } return params; } else { return typeTransform(type, values[0]); } } private static Object typeTransform(Class<?> type, String value) { String typeName = type.getName(); if("java.lang.String".equals(typeName)) return value.toString(); else if("java.lang.Integer".equals(typeName) || "int".equals(typeName)) return Integer.valueOf(value); else if("java.lang.Boolean".equals(typeName) || "boolean".equals(typeName)) return Boolean.valueOf(value); else if("java.lang.Double".equals(typeName) || "double".equals(typeName)) return Double.valueOf(value); else if("java.lang.Float".equals(typeName) || "float".equals(typeName)) return Float.valueOf(value); else if("java.lang.Long".equals(typeName) || "long".equals(typeName)) return Long.valueOf(value); else if("java.lang.Short".equals(typeName) || "short".equals(typeName)) return Short.valueOf(value); else return null; }
如果type是数组,则创建Object数组,但是这样造成的问题就是通过反射调用时,如果方法需要String类型的数组,这里给的Object类型的数组,则会报错:
java.lang.IllegalArgumentException: argument type mismatch,我试图改成下面的代码:
/** * 类型转换 * @param type * @param values * @return */ private static Object transform(Class<?> type, String[] values) { if(type.isArray()) { Class<?> clazz = type.getComponentType(); Object [] params; if("java.lang.String".equals(clazz.getName())){ params = new String[values.length]; } else if("java.lang.Integer".equals(clazz.getName()) || "int".equals(clazz.getName())) { params = new Integer[values.length]; } else if("java.lang.Boolean".equals(clazz.getName()) || "boolean".equals(clazz.getName())) { params = new Boolean[values.length]; } else if("java.lang.Double".equals(clazz.getName()) || "double".equals(clazz.getName())) { params = new Double[values.length]; } else if("java.lang.Float".equals(clazz.getName()) || "float".equals(clazz.getName())) { params = new Float[values.length]; } else if("java.lang.Long".equals(clazz.getName()) || "long".equals(clazz.getName())) { params = new Long[values.length]; } else if("java.lang.Short".equals(clazz.getName()) || "short".equals(clazz.getName())) { params = new Short[values.length]; } else { params = new Object[values.length]; } for (int i = 0; i < values.length; i++) { params[i] = typeTransform(clazz, values[i]); } return params; } else { return typeTransform(type, values[0]); } }
这样是可以的,但是总觉得这样不是好的方式,因为太多的相似代码了,但是又苦于不知道如何处理。如果能方便,希望可以提供思路,谢谢大家!
相关文章推荐
- Java基础——引用类型转换
- Java基本数据类型:long与float之间的转换疑惑
- Java多态中的引用类型转换理解模型
- java多态中的引用类型转换
- Java 引用类型转换
- Java多态中的引用类型转换
- JAVA中变量,常量,基本类型,引用类型,数据类型转换
- 第一周第一天([用文档编辑Java并运行] [Java中数据类型的转换][标题的使用] [引用的使用] [代码块的使用] [图片的使用] [JDK] [Eclipse])
- Java知识(多态和引用类型转换)
- Java学习笔记二十六:Java多态中的引用类型转换
- java:对象中引用类型转换的验证
- 厨娘的Java笔记(一):强制类型转换之引用转换
- Java---引用类型强制转换之学生、干部
- Java中引用类型变量的转换
- Java的基本数据类型:8种基本类型、对应的包装类、引用数据类型及与String 之间的转换。
- Java多态之引用类型转换
- Java的引用类型转换
- Java中的多态,引用类型的转换
- Java知识点整理:第六章:访问控制修饰符、引用类型的转换、Java Bean规范
- JAVA学习-多类中的引用类型转换