通过使用java Field getType()方法进行转换,将对象从一个类型转换为另一个

时间:2011-03-15 22:59:17

标签: java reflection casting

我正在使用kso​​ap2,当我得到一个看起来像的肥皂对象时:

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

1 个答案:

答案 0 :(得分:0)

您必须编写自定义强制代码才能执行此操作。尝试简单地转换值是不可能的,因为它需要规则来处理诸如转换booleanint之类的情况。你需要写一个像这样的方法:

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