Javaでの反射のまとめ

2523 ワード

一、反射(Reflect)説明
JAVA反射メカニズムは,動作状態において,いずれのクラスに対しても,このクラスのすべての属性と方法を知ることができる.任意のオブジェクトについて、その任意のメソッドと属性を呼び出すことができます.これはClassオブジェクトによって行われます.このような動的に取得された情報と、動的にオブジェクトを呼び出すメソッドの機能はjava言語の反射メカニズムと呼ばれます.クラスを解剖するには、クラスのバイトコードファイルオブジェクトを取得する必要があります.解剖にはClassクラスの方法が使われている.まず、各バイトコードファイルに対応するClassタイプのオブジェクトを取得する.Classはクラス全体、FeFieldプロパティ、MeThodメソッド、Constructorメソッドを表します.
二、クラス
2.1 Classクラスの作成方法
//c               ,    ,        
Class c = Class.forNmae(String className);

//      Class  ,         
Class c=ClassName.class;

//      ,    .cgetClass()  
User user=new User();
Class c=user.getClass();
//  newInstance()      Class       
//            
Object 0=c.newInstance();

2.2 Fields取得属性
//     Public     
Field [] fs=c.getFields();
//      
Field [] fs=c.getDeclaredFiedls();

//     
int i=fs.getModiFields();
String strModfire=Modifire.toString(i);// Int   String 
//         
Class type=fis.getType();
String name=type.getName();
//     
String name=fs[i].getName();
//       
Field field=c.getDeclaredFiedls("name");

//  
Object o=c.newInatance();
//      ,    ,        ,         
field.setAccessiable(true);
field.set(o,"  "); 
//   
field.get(o);

2.3 Methodメソッド
//       
Method [] ms=c.getDeclaredMethods();

//       
int i=ms[i].getModifires();
String modifireName=Modifire.toString(i)
//       
Class returnType=ms[i].getReturnType();
String name=returnType.getSimpleName();
//     
String name=ms.getName();
//            
Class[] parmeters=ms.getParmeterTypes();
//         
//     +    ,    methodName  ,     ,      
Method m=c.getDeclaredMethod("methodName",String.class,String.class);
Object o=c.newInstance();
Object retValue=m.invoke(0,"  ","  ")

2.4 Constructor構築方法
//         
Constructor[] cs=c.getDeclaredConstructor();
//     
int i=cs[i].getModifires();
String modifireName=Modifire.toString(i)
//       
String name=cs[i].getName();
//             
Class[] parmterTypes=cs[i].getParamterTypes();
parmterTypes.getName();
//         ,    ,      
Constructor con=c.getDeclaredConstructor(String.class,int.class);
//    
Object o=con.newInstance("XX",10);

2.5親または親インタフェースの取得
//    
Class superClass=c.getSuperclass();
superClass.getName();
//     
Class[] ins=c.getInterfaces();
ins[i].getName();