import java.lang.reflect.*;
public class DumpMethods
{
public static void main(String args[])
{
try {
Class target = Class.forName(args[0]);
Method methodList[] = target.getDeclaredMethods();
for
(int i = 0; i < methodList.length; i++)
{
System.out.println(methodList[i].toString());
}
}
catch (Throwable e) {
System.err.println(e);
}
}
}
java DumpMethods java.util.Stack
yields the output:
public java.lang.Object java.util.Stack.push(Could we use reflection in the Plugins Lab?
java.lang.Object)
public synchronized
java.lang.Object java.util.Stack.pop()
public synchronized
java.lang.Object java.util.Stack.peek()
public boolean java.util.Stack.empty()
public synchronized
int java.util.Stack.search(java.lang.Object)
package Reflection; import java.lang.reflect.Constructor; import java.util.TreeSet; import java.util.Arrays; import java.util.Collection; import java.util.AbstractSet; public class CreateInstance { /** Production code should catch all exceptions */ @SuppressWarnings("unchecked") // Warning - reflection is dangerous public static void main(String args[]) throws Throwable { Class stringClass = java.lang.String.class; // creating an object with no arguments: String() String myString = (String) stringClass.newInstance(); myString = "Hello World"; System.out.println("My String:" + myString); // creating an object with multiple arguments: String(char[] value, int offset, int count) Constructor constructor = stringClass.getConstructor(new Class[] { char[].class, int.class, int.class }); char[] word = {'M','y',' ','w','o','r','d'}; myString = (String) constructor.newInstance(new Object[] { word, 3, 4 }); System.out.println("My String:" + myString); // creating an object with one argument that's an Object: TreeSet(Collection c) Class setClass = java.util.TreeSet.class; constructor = setClass.getConstructor(new Class[] { Collection.class }); String[] words = {"one","two","three"}; Object[] arguments = new Object[1]; arguments[0] = Arrays.asList(words); TreeSet mySet = (TreeSet) constructor.newInstance(arguments); System.out.println("My Set:" + mySet); // create an object for a class whose name we don't know at compile time Class someClass = Class.forName(args[0]); Object someThing = someClass.newInstance(); // If the class is supposed to be derived from a base class (like java.util.TreeSet) AbstractSet aSet = (AbstractSet) someClass.newInstance(); aSet.add("able"); System.out.println("A Set:" + aSet); } }