我在java中使用反射。
我开始知道我在运行时传递的方法参数的类型。所以我将文件中的参数值提取到字符串变量中。
现在,如果我知道参数类型为整数,并且如果我传递包含字符串值的对象,我将获得
参数类型不匹配 java.lang.IllegalArgumentException:参数类型不匹配
Class classDefinition = Class.forName("webservices."+objectName);
String methodName = set"+fieldNameAttay[i].substring(0,1)).toUpperCase()+fieldNameAttay[i].substring(1); Field f = classDefinition.getDeclaredField(fieldNameAttay[i]);
try
{
//argType = f.getType();
Method meth = classDefinition.getMethod(methodName,f.getType());
Object arg = new Object[]{fieldValueArray[i]}; //fieldValueArray[i] is always string array
meth.invoke(object, arg); //If f.getType is Integer this //throws ex
}
catch (Exception e)
{
System.err.println(e.getMessage());
e.printStackTrace();
}
答案 0 :(得分:5)
你不能将字符串转换为整数 - 你可以解析它。例如:
if (parameterType == int.class && argumentType == String.class)
{
int integerArgument = Integer.parseInt((String) argumentValue);
// Now call the method appropriately
}
当然,您还需要考虑Integer
以及int
。
答案 1 :(得分:1)
怎么样
Integer.parseInt((String) stringObj)
请注意,仅当两个对象属于同一层次结构时才会进行强制转换。所以这不是铸造。
答案 2 :(得分:1)
如果你使用的唯一类型是String和Integer,那么检查类型然后使用Integer.parseInt
可能是最简单的事情。
但是如果你有更多不同的类型,我建议你查看旧的JavaBeans框架:http://download.oracle.com/javase/tutorial/javabeans/index.html
特别是PropertyEditors http://download.oracle.com/javase/7/docs/api/java/beans/PropertyEditor.html http://download.oracle.com/javase/7/docs/api/java/beans/PropertyEditorManager.html
PropertyEditors允许您将值设置为文本,然后将值检索为正确的类型。假设您已经实现并注册了属性编辑器,那么获取正确类型的步骤就是这样的:
...或者您可以通过使用类似但更简单的接口实现自己的转换框架,使相同的机制适应您的简单需求。
答案 3 :(得分:0)
System.out.println(Integer.parseInt(obj.toString()))
答案 4 :(得分:0)
还有另一种方法:
整数= Integer.valueOf(“1”);