14章类型信息---反射

//: 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); }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值