2010-12-27 23 views
1

私はJavaでリフレクションを使用しています。実行時に文字列を整数にキャストする方法

私は、実行時に渡すメソッドのパラメータの型を知るようになっています。だから、ファイルから文字列変数にパラメータ値を取得しています。

iは整数としてパラメータの型ことを知るようになると場合、私は、文字列値をcontaintingオブジェクトを渡すとだから今、私は

引数の型の不一致 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(); 
      } 

答えて

1

どのように2つのオブジェクトが同じHIEに属している場合にのみ、キャストが発生する可能性があることについて

Integer.parseInt((String) stringObj) 

は注意ラッキー。これは鋳造ではありません。

5

あなたはは整数に文字列をキャストすることはできません - あなたはしかしにそれを解析することができます。たとえば:もちろん

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

は、あなたもIntegerだけでなく、intを考慮する必要があります。

0
System.out.println(Integer.parseInt(obj.toString())) 
1

使用している唯一のタイプの場合は、文字列と整数の、種類をチェックしてからInteger.parseIntを使用する最も簡単な方法かもしれないです。

あなたはより多くの異なる種類を持っている場合しかし、私は古き良きのJavaBeans framworkチェックアウトすることをお勧め:http://download.oracle.com/javase/tutorial/javabeans/index.html

、特にのPropertyEditor 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を使用すると、値をテキストとして設定し、正しい値として値を取得できます。あなたが実装され、プロパティエディタを登録していると仮定すると、正しい型を取得するための手順は、これにsimilerです:

  1. パラメータ
  2. の種類を調べ、そのタイプ
  3. 使用いるsetAsTextのためのPropertyEditorを取得し、プロパティエディタのgetValueを使用して、値を正しいタイプに変換します。

...または同様の簡単なインターフェイスで独自の変換フレームワークを実装することで、簡単なニーズに同じメカニズムを適用できます。

0

それを行うための別の方法があります:

整数= Integer.valueOf( "1");

関連する問題