]> source.dussan.org Git - javassist.git/commitdiff
fixed JIRA JASSIST-122
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Thu, 8 Jul 2010 18:17:03 +0000 (18:17 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Thu, 8 Jul 2010 18:17:03 +0000 (18:17 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@553 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

src/main/javassist/Modifier.java
tutorial/tutorial3.html

index 567f1fa5e157da9f27e9699fd3b146c108d371e1..c1b30d67a63c7ad174275574b48de07e88c93d58 100644 (file)
@@ -35,6 +35,7 @@ public class Modifier {
     public static final int FINAL     = AccessFlag.FINAL;
     public static final int SYNCHRONIZED = AccessFlag.SYNCHRONIZED;
     public static final int VOLATILE  = AccessFlag.VOLATILE;
+    public static final int VARARGS = AccessFlag.VARARGS;
     public static final int TRANSIENT = AccessFlag.TRANSIENT;
     public static final int NATIVE    = AccessFlag.NATIVE;
     public static final int INTERFACE = AccessFlag.INTERFACE;
index 17e214104c6c85a577a6f7d3a7f42417d21258b0..9b281a1369ca62034968c757ce284d068cc1ced5 100644 (file)
@@ -24,7 +24,9 @@
 
 <p><a href="#generics">6. Generics</a>
 
-<p><a href="#j2me">7. J2ME</a>
+<p><a href="#varargs">7. Varargs</a>
+
+<p><a href="#j2me">8. J2ME</a>
 
 <p><br>
 
@@ -294,7 +296,43 @@ public Object get() { return value; }
 
 <p><br>
 
-<h2><a name="j2me">7. J2ME</a></h2>
+<h2><a name="varargs">7. Varargs</a></h2>
+
+<p>Currently, Javassist does not directly support varargs.  So to make a method with varargs,
+you must explicitly set a method modifier.  But this is easy.
+Suppose that now you want to make the following method:
+
+<ul><pre>
+public int length(int... args) { return args.length; }
+</pre></ul>
+
+<p>The following code using Javassist will make the method shown above:
+
+<ul><pre>
+CtClass cc = /* target class */;
+CtMethod m = CtMethod.make("public int length(int[] args) { return args.length; }", cc);
+m.setModifiers(m.getModifiers() | Modifier.VARARGS);
+cc.addMethod(m);
+<pre></ul>
+
+<p>The parameter type <code>int...</code> is changed into <code>int[]</code>
+and <code>Modifier.VARARGS</code> is added to the method modifiers.
+
+<p>To call this method, you must write:
+
+<ul><pre>
+length(new int[] { 1, 2, 3 });
+</pre></ul>
+
+<p>instead of this method call using the varargs mechanism:
+
+<ul><pre>
+length(1, 2, 3);
+</pre></ul>
+
+<p><br>
+
+<h2><a name="j2me">8. J2ME</a></h2>
 
 <p>If you modify a class file for the J2ME execution environment,
 you must perform <it>preverification</it>.  Preverifying is basically