как привести строку к целому числу во время выполнения - PullRequest
1 голос
/ 27 декабря 2010

Я использую отражение в 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();
          }

Ответы [ 5 ]

5 голосов
/ 27 декабря 2010

Вы не можете привести строку к целому числу - вы можете проанализировать это все же.Например:

if (parameterType == int.class && argumentType == String.class)
{
    int integerArgument = Integer.parseInt((String) argumentValue);
    // Now call the method appropriately
}

Конечно, вам также необходимо учитывать Integer, а также int.

1 голос
/ 27 декабря 2010

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

  1. Узнайте тип параметра
  2. Извлеките PropertyEditor для этого типа
  3. Используйте setAsText и getValue в редакторе свойств, чтобы преобразовать значение в правильный тип

... или вы можете просто адаптировать тот же механизм к вашим простым потребностям, реализовав собственное преобразованиефреймворк с похожими, но более простыми интерфейсами.

1 голос
/ 27 декабря 2010

Как насчет

Integer.parseInt((String) stringObj)

Обратите внимание, что приведение может произойти, только если два объекта принадлежат одной иерархии. Так что это не кастинг.

0 голосов
/ 27 декабря 2010

Есть еще один способ сделать это:

Целое число = Integer.valueOf ("1");

0 голосов
/ 27 декабря 2010
System.out.println(Integer.parseInt(obj.toString()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...