|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。java的反射手艺功效非常壮大,收拾一些材料!!
(如需转载,请说明出处!)
Lesson:检测类examingclass
1.RetrievingClassObjects
猎取一个Class对象(metadata)
a,从对象的实例猎取。
Classc=mystery.getClass();//(returnClass)
b,从子类的实例猎取
TextFieldt=newTextField();
Classc=t.getClass();
Classs=c.getSuperclass();
c,晓得类名,则能够把.class到场到名字以后来猎取。
Classc=java.awt.Button.class;
d,假如类名在编译时是未知的,则可使用Class.forName()办法来猎取.
Classc=Class.forName(classString);
2.GettingtheClassName
猎取类称号
c.getName();
比方:
importjava.lang.reflect.*;
importjava.awt.*;
classSampleName{
publicstaticvoidmain(String[]args){
Buttonb=newButton();
printName(b);
}
staticvoidprintName(Objecto){
Classc=o.getClass();
Strings=c.getName();
System.out.println(s);
}
}
3.DiscoveringClassModifiers
检索修正符
a.经由过程getModifiers()办法猎取一个整型标识值。
b.经由过程java.reflect.Modifier对象的isPublic,isAbstract,和isFinal办法判别此值.
比方:
importjava.lang.reflect.*;
importjava.awt.*;
classSampleModifier{
publicstaticvoidmain(String[]args){
Strings=newString();
printModifiers(s);
}
publicstaticvoidprintModifiers(Objecto){
Classc=o.getClass();
intm=c.getModifiers();
if(Modifier.isPublic(m))
System.out.println("public");
if(Modifier.isAbstract(m))
System.out.println("abstract");
if(Modifier.isFinal(m))
System.out.println("final");
}
}
4.FindingSuperclasses
检索父类
比方:
importjava.lang.reflect.*;
importjava.awt.*;
classSampleSuper{
publicstaticvoidmain(String[]args){
Buttonb=newButton();
printSuperclasses(b);
}
staticvoidprintSuperclasses(Objecto){
Classsubclass=o.getClass();
Classsuperclass=subclass.getSuperclass();
while(superclass!=null){
StringclassName=superclass.getName();
System.out.println(className);
subclass=superclass;
superclass=subclass.getSuperclass();
}
}
}
5.IdentifyingtheInterfacesImplementedbyaClass
检索指定类完成的接口
比方:
importjava.lang.reflect.*;
importjava.io.*;
classSampleInterface{
publicstaticvoidmain(String[]args){
try{
RandomAccessFiler=newRandomAccessFile("myfile","r");
printInterfaceNames(r);
}catch(IOExceptione){
System.out.println(e);
}
}
staticvoidprintInterfaceNames(Objecto){
Classc=o.getClass();
Class[]theInterfaces=c.getInterfaces();
for(inti=0;i<theInterfaces.length;i++){
StringinterfaceName=theInterfaces[i].getName();
System.out.println(interfaceName);
}
}
}
6.ExaminingInterfaces
判断一个类是否是接口
importjava.lang.reflect.*;
importjava.util.*;
classSampleCheckInterface{
publicstaticvoidmain(String[]args){
Classthread=Thread.class;
Classrunnable=Runnable.class;
verifyInterface(thread);
verifyInterface(runnable);
}
staticvoidverifyInterface(Classc){
Stringname=c.getName();
if(c.isInterface()){
System.out.println(name+"isaninterface.");
}else{
System.out.println(name+"isaclass.");
}
}
}
如:c.isInterface()
7.IdentifyingClassFields
找出指定类一切的域成员
每一个数据成员能够用java.reflect.Field来关闭其称号,范例,修正符的汇合。
也能够经由过程响应的办法猎取或设置到该成员的值。
如:
importjava.lang.reflect.*;
importjava.awt.*;
classSampleField{
publicstaticvoidmain(String[]args){
GridBagConstraintsg=newGridBagConstraints();
printFieldNames(g);
}
staticvoidprintFieldNames(Objecto){
Classc=o.getClass();
Field[]publicFields=c.getFields();
for(inti=0;i<publicFields.length;i++){
StringfieldName=publicFields[i].getName();
ClasstypeClass=publicFields[i].getType();
StringfieldType=typeClass.getName();
System.out.println("Name:"+fieldName+
",Type:"+fieldType);
}
}
}
8.DiscoveringClassConstructors
检索指定类的机关函数
当创立一个类的实例时,是经由过程检造办法来作的,这类办法能够被重载。
每个机关办法能够用类Constructor来形貌,,包含称号,润色符,参数范例(Class[]),和非常列表。
能够经由过程一个Class的getConstructors办法猎取到该类的Constructor数组。
例程:
importjava.lang.reflect.*;
importjava.awt.*;
classSampleConstructor{
publicstaticvoidmain(String[]args){
Rectangler=newRectangle();
showConstructors(r);
}
staticvoidshowConstructors(Objecto){
Classc=o.getClass();
Constructor[]theConstructors=c.getConstructors();
for(inti=0;i<theConstructors.length;i++){
System.out.print("(");
Class[]parameterTypes=
theConstructors[i].getParameterTypes();
for(intk=0;k<parameterTypes.length;k++){
StringparameterString=parameterTypes[k].getName();
System.out.print(parameterString+"");
}
System.out.println(")");
}
}
}
9.ObtainingMethodInformation
检索办法
能够找到从属于一个类的一切办法,经由过程getMethods包括Method数组,进而失掉该办法的前往范例,润色符,办法称号,参数列表
步骤:
a.指定类的ClassObject
b.getMethods()猎取Method[]对象
c,遍历该数组对象
例程:
importjava.lang.reflect.*;
importjava.awt.*;
classSampleMethod{
publicstaticvoidmain(String[]args){
Polygonp=newPolygon();
showMethods(p);
}
staticvoidshowMethods(Objecto){
Classc=o.getClass();
Method[]theMethods=c.getMethods();
for(inti=0;i<theMethods.length;i++){
StringmethodString=theMethods[i].getName();
System.out.println("Name:"+methodString);
StringreturnString=
theMethods[i].getReturnType().getName();
System.out.println("ReturnType:"+returnString);
Class[]parameterTypes=theMethods[i].getParameterTypes();
System.out.print("ParameterTypes:");
for(intk=0;k<parameterTypes.length;k++){
StringparameterString=parameterTypes[k].getName();
System.out.print(""+parameterString);
}
System.out.println();
}
}
}
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。 |
|