14章类型信息---反射

来源:互联网 发布:西门子plc编程基本训练 编辑:程序博客网 时间:2024/06/05 02:29
//: typeinfo/ShowMethods.java
// Using reflection to show all the methods of a class,
// even if the methods are defined in the base class.
// {Args: ShowMethods}
import java.lang.reflect.*;
import java.util.regex.*;
import static net.mindview.util.Print.*;


public class ShowMethods {
  private static String usage =
    "usage:\n" +
    "ShowMethods qualified.class.name\n" +
    "To show all methods in class or:\n" +
    "ShowMethods qualified.class.name word\n" +
    "To search for methods involving 'word'";
  private static Pattern p = Pattern.compile("\\w+\\.");
  public static void main(String[] args) {
    if(args.length < 1) {
      print(usage);
      System.exit(0);
    }
    int lines = 0;
    try {
      Class<?> c = Class.forName(args[0]);
      Method[] methods = c.getMethods();
//得到所有的方法
      Constructor[] ctors = c.getConstructors();//得到所有的构造器
      if(args.length == 1) {
        for(Method method : methods)
          print(

            p.matcher(method.toString()).replaceAll(""));//这里用的正则表达式,是为了去除,

//像public final void java.lang.Object.wait() throws java.lang.InterruptedException中的java.lang.Object.和java.lang.

//去除之后,就变成了public final void wait() throws InterruptedException

        //print(method.toString());
        for(Constructor ctor : ctors)
          print(p.matcher(ctor.toString()).replaceAll(""));
        //print(ctor.toString());
        lines = methods.length + ctors.length;
      } else {
        for(Method method : methods)
          if(method.toString().indexOf(args[1]) != -1) {
            print(
              p.matcher(method.toString()).replaceAll(""));
            lines++;
          }
        for(Constructor ctor : ctors)
          if(ctor.toString().indexOf(args[1]) != -1) {
            print(p.matcher(
              ctor.toString()).replaceAll(""));
            lines++;
          }
      }
    } catch(ClassNotFoundException e) {
      print("No such class: " + e);
    }
  }
} /* Output:
public static void main(String[])
public native int hashCode()
public final native Class getClass()
public final void wait(long,int) throws InterruptedException
public final void wait() throws InterruptedException
public final native void wait(long) throws InterruptedException
public boolean equals(Object)
public String toString()
public final native void notify()
public final native void notifyAll()
public ShowMethods()

*///:~


如果要得到指定的构造器,构造对象

Toy.class.getDeclaredConstructor(int.class).newInstance(1);

下面是Toy类:

class Toy {
Toy() {
print("Creating Toy() object");
}
Toy(int i) {
print("Creating Toy(" + i + ") object");
}
}


class FancyToy extends Toy 
implements HasBatteries, Waterproof, Shoots {
FancyToy() { super(1); }
}

0 0