2 Replies Latest reply on Aug 17, 2005 8:14 AM by m.morel

    initialization of static arrays

    m.morel

      Hello,

      I would like to generate a class with a static field which is an array :

      CtClass generatedClass = pool.makeClass("TestClass");
      CtField myStaticField = new CtField(pool.get(MyClass[].class.getComponentType().getName()), "myStaticField", generatedClass);
      myStaticField.setModifiers(Modifier.STATIC);
      generatedClass.addField(myStaticField);
      


      I want to initialize the array when loading the class (in a static block):
      CtConstructor classInitializer = generatedClass.makeClassInitializer();
      String classInitializerBody = "{\n";
      classInitializerBody += ("myStaticField = new MyClass[2];\n");
      classInitializerBody += ("\n}");
      classInitializer.setBody(classInitializerBody);
      


      Unfortunately, I get the following error :
      javassist.CannotCompileException: [source error] incompatible type for =
       at javassist.CtBehavior.setBody(CtBehavior.java:194)
       at javassist.CtBehavior.setBody(CtBehavior.java:163)
       at javassist.CtConstructor.setBody(CtConstructor.java:201)
       at test.Main.main(Main.java:41)
      


      It seems that I get this error for any type of table, including tables on classes from the jdk, except for Object[].

      My question is : is it impossible to initialize static arrays in static blocks with Javassist? Am I doing it the wrong way? Is there a walkaround?

      Thanks for any help,


      Matthieu

        • 1. Re: initialization of static arrays
          chiba

           

          CtClass generatedClass = pool.makeClass("TestClass");
          CtField myStaticField = new CtField(pool.get(MyClass[].class.getComponentType().getName()), "myStaticField", generatedClass);
          myStaticField.setModifiers(Modifier.STATIC);
          generatedClass.addField(myStaticField);


          The third line is wrong. It should be:

          CtField myStaticField = new CtField(pool.get("MyClass[]"), "myStaticField", generatedClass);


          In the original code, the type of the added field is not MyClass[] but MyClass.

          • 2. Re: initialization of static arrays
            m.morel

            mmm.. beginner's mistake...

            Thanks for the help, now it works fine !