您的位置:首页 > 其它

14章类型信息---反射

2014-12-11 17:04 225 查看
//: 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); }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: