2011-08-04 6 views
4

を支援するJava私の最初の試みである:は、私はその場でいくつかのクラスを生成しようとしているし、次の午前初心者の質問

ClassPool cp = ClassPool.getDefault(); 
    cp.insertClassPath(new ClassClassPath(Main.class)); 
    CtClass entity = cp.makeClass("Entity"); 
    try { 
     CtField id = new CtField(CtClass.intType, "id", entity); 

     entity.addField(id); 
     entity.addField(CtField.make(" public String name;", entity)); 
     entity.addMethod(CtNewMethod.make("public void say() { System.out.println(12222);}",entity)); 
     Class EntityClass = entity.toClass(); 
     entity.writeFile("/tmp"); 
     Object e= EntityClass.newInstance(); 
     Field name = EntityClass.getField("name"); 
     name.set("Ooldooz", e); 
     System.out.println(name.get(e)); 
    } catch (CannotCompileException e) { 
     e.printStackTrace(); 
    } catch (InstantiationException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (NoSuchFieldException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

しかし、私はクラスローダの問題に直面する:スレッド内

例外"main" java.lang.IllegalArgumentException:java.lang.StringフィールドのEntity.nameをjava.lang.Stringに設定できない at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146) at sun.reflect.UnsafeFieldAccessorImpl .throwSetIllegalArgumentExc eption(UnsafeFieldAccessorImpl.java:150)sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37)で sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:57)で をjava.lang.reflect.Fieldで 。セットMain.testとで(Field.java:657) (Main.java:26)

私はこれを解決する方法上の任意のアイデア?

答えて

2

Field#setは、オブジェクトを第1パラメータとして、値を第2パラメータとして取ります。

あなたはそれを逆に呼びます。

name.set(e, "Ooldooz");

関連する問題