Преобразование объекта из типа в другой, приведение с использованием метода Java поле getType () - PullRequest
0 голосов
/ 16 марта 2011

Я использую 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);

}

Проблема в том, что тег иногда может быть, скажем, логическим, но значение имеет soapprimitve тип объекта ...

Какя могу привести значение, используя поле getType, то есть что-то вроде: (dynamicSet.getType())value?

1 Ответ

0 голосов
/ 16 марта 2011

Для этого вам придется написать собственный код приведения. Попытка простого приведения значения будет невозможна, поскольку для обработки таких случаев потребуются правила, такие как приведение 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 при необходимости .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...