// These are args that will get passed static String[] strArray = new String[] {"a", "b"}; staticint[] intArray = newint[] {1, 2};
// We will pass these to a varargs instance method static VarargsTarg vt1 = new VarargsTarg("vt1", ""); static VarargsTarg vt2 = new VarargsTarg("vt2", "");
String iname;
VarargsTarg(String ... name) {
iname = ""; for (int ii = 0; ii < name.length; ii++) {
iname += name[ii];
}
}
// Should be autoboxed: javac converts the ints to Integers // Needs a new method in java.lang.Integer which is only // in the generics workspace.
System.out.println("debugggee: " + varInteger(3, 5, 6));
System.out.println("Goodbye from VarargsTarg!");
bkpt();
} staticvoid bkpt() {
}
if (!varString.isVarArgs()) {
fail("failure: varString is not flagged as being var args");
} if (!varString2.isVarArgs()) {
fail("failure: varString2 is not flagged as being var args");
}
/* *ButpassinganarrayofStringsandanotherString *shouldfail
*/
argsArray.add(vm().mirrorOf("x")); boolean isOk = false; try { // call varString(new String[] {"a", "b"}, "x")
doInvokeNoVerify(targetClass, varString, argsArray);
} catch (Exception ee) { /* *Sincethenumberofargspassedis>than *thenumberofparams,JDIassumestheyarevarargs *andtriestoputthearraycontainingthe"a"and *"b"elementsintothefirstelementofanarray *ofStrings.Thisfailsbecauseyoucan'tstore *anarrayintoaString
*/
isOk = true; //ee.printStackTrace();
} if (!isOk) {
fail("failure: an array and a String didn't cause an exception");
}
}
{ /* *Testcallinginstancemethodinsteadofstaticmethod, *andpassingnon-Stringobjects
*/
Field vtField = targetClass.fieldByName("vt1");
Value vv1 = targetClass.getValue(vtField);
vtField = targetClass.fieldByName("vt2");
Value vv2 = targetClass.getValue(vtField);
/* Create a new instance by calling the varargs *ctor. *callnewVarargsTarg("vt3","xx");
*/
Value vv3;
{
mList = rt.methodsByName("<init>");
Method ctor = (Method)mList.get(0); if (!ctor.isVarArgs()) {
fail("failure: Constructor is not varargs");
}
ArrayList argsArray = new ArrayList(2);
argsArray.add(vm().mirrorOf("vt3"));
argsArray.add(vm().mirrorOf("xx"));
vv3 = targetClass.newInstance(mainThread, ctor, argsArray, 0);
} // call vt1.varStringInstance(vv1, vv2, vv3)
mList = rt.methodsByName("varStringInstance");
Method varStringInstance = (Method)mList.get(0);
ArrayList argsArray = new ArrayList(3);
argsArray.add(vv1);
argsArray.add(vv2);
argsArray.add(vv3);
doInvoke(vv1, varStringInstance, argsArray, "vt1: vt1vt2vt3xx");
}
{ /* *testswithprimitivetypes
*/
List mlist;
Method mm;
ArrayList ll = new ArrayList(2);
// call fixedInt(21)
mlist = rt.methodsByName("fixedInt");
mm = (Method)mlist.get(0);
ll.add(vm().mirrorOf(21));
doInvoke(targetClass, mm, ll, "21");
// autoboxing is not implemented in JDI. // call fixedInteger(21) //mlist = rt.methodsByName("fixedInteger"); //mm = (Method)mlist.get(0); //doInvoke(targetClass, mm, ll, "21");
mlist = rt.methodsByName("varInt");
mm = (Method)mlist.get(0);
// call varInt( new int[] {1, 2});
Field ff = targetClass.fieldByName("intArray");
Value vv1 = targetClass.getValue(ff);
ll.set(0, vv1);
doInvoke(targetClass, mm, ll, "12");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.