diff options
-rw-r--r-- | src/main/javassist/Modifier.java | 1 | ||||
-rw-r--r-- | tutorial/tutorial3.html | 42 |
2 files changed, 41 insertions, 2 deletions
diff --git a/src/main/javassist/Modifier.java b/src/main/javassist/Modifier.java index 567f1fa5..c1b30d67 100644 --- a/src/main/javassist/Modifier.java +++ b/src/main/javassist/Modifier.java @@ -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; diff --git a/tutorial/tutorial3.html b/tutorial/tutorial3.html index 17e21410..9b281a13 100644 --- a/tutorial/tutorial3.html +++ b/tutorial/tutorial3.html @@ -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 |