我正在使用ksoap2,当我得到一个看起来像的肥皂对象时:
params=anyType
{
defaultValueString=10;
label=Number of search results;
optional=true;
PRName=Yahoo PR;
paramName=limit;
pipelineName=Yahoo Search;
type=int;
};
我尝试使用方法setAttr
更改类中的某些字段:
编写setAttr
方法:
public void setAttr(Object tag,Object value)
{
Field dynamicSet = gateRuntimeParameter.class.getField((String)tag);
dynamicSet.set(new gateRuntimeParameter(), value);
}
问题是标签有时可以说是:boolean,但value是soapprimitve
对象类型......
如何使用字段getType
投射价值,例如:(dynamicSet.getType())value
?
答案 0 :(得分:0)
您必须编写自定义强制代码才能执行此操作。尝试简单地转换值是不可能的,因为它需要规则来处理诸如转换boolean
到int
之类的情况。你需要写一个像这样的方法:
public Object coerce(Object value, Class<?> coerceTo) {
if (Boolean.class.equals(coerceTo)) {
//coerce soap primitive to Boolean
}
else if (Integer.class.equals(coerceTo)) {
//coerce soap primitive to Integer
}
else if (List.class.equals(coerceTo)) {
return Collections.singletonList(coerce(value, coerceTo.getTypeParameters()[0]));
}
}
请注意,java的自动装箱/拆箱意味着您无需担心将int
案例分别处理到java.lang.Integer
,只需处理java.lang.Integer
并且java会自动强制执行如果需要,可以int
。