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); }
}
// 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); }
}
相关文章推荐
- 14章类型信息--注册工厂---instandceof与Class的等价性--反射
- Net 中的反射(查看基本类型信息) - Part.2
- Net 中的反射(查看基本类型信息) - Part.2 (收藏转帖http://blog.csdn.net/xxw_come/archive/2008/03/24/2213888.aspx)
- 反射_01概述和反射中的运行时类型以及查看类型信息
- .NET反射的定义:审查元数据并收集关于它的类型信息的能力。
- .Net 中的反射(查看基本类型信息) - Part.2
- 使用反射技术列举类型信息!
- 黑马程序员--Java基础加强--14.利用反射操作泛型III【解析关于泛型类型的细节信息的获取方法】【Method与泛型相关的方法】【个人总结】
- 动态加载外部程序集并用反射获取指定类型的信息
- 利用反射技术获取当前程序集指定类型的信息
- C# 反射机制(1)查看类型基本信息
- .Net 中的反射(查看基本类型信息) - Part.2
- .Net 中的反射(查看基本类型信息) - Part.2
- 反射-查看类型信息转自MSDN
- 反射_01概述和反射中的运行时类型以及查看类型信息
- .Net 中的反射(查看基本类型信息) - Part.2
- .Net 中的反射(查看基本类型信息) - Part.2 (转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part2.aspx)
- .Net 中的反射(查看基本类型信息) - Part.2
- .Net 中的反射(查看基本类型信息) - Part.2 – (转载)
- java学习笔记---类型信息(type information)、反射机制与动态代理