📄 java_reflect.java
字号:
package org.qiming.owen.common;
import java.lang.reflect.*;
public class Java_reflect
{
public Java_reflect()
{
}
public static void main(String[] args)
{
// Interested aInterested=new Interested();
// basereflect3(aInterested);
}
/**
* 得到多个描述类Dept中属性的Field实例
* **/
public static void basereflect(Object obj)
{
Field[] fs= obj.getClass().getDeclaredFields();//得到多个描述类Dept中属性的Field实例
for(int i=0;i<fs.length;i++)
{
Field f=fs[i];
String fname=f.getName(); //属性名称
String type=f.getType().toString(); //属性类型
int modifier= f.getModifiers();//修饰:0--默认 1--public 2--private 4--protected
System.out.println("属性名称:----"+fname+"--属性类型-----"+type+"---修饰====--"+modifier);
}
}
public static void basereflect2(Object obj)
{
Method[] ms= obj.getClass().getDeclaredMethods();//?
for(int i=0;i<ms.length;i++)
{
Method m=ms[i];//?一个实例描述的是类中自己一个方法
String mname=m.getName(); //方法名
String returntype=m.getReturnType().toString(); //方法返回类型
Class[] params=m.getParameterTypes();
int modifier=m.getModifiers(); ////修饰:0--默认 1--public 2--private 4--protected
System.out.println(mname);
System.out.println("返回值类型:"+returntype);
for(int j=0;j<params.length;j++)
{
String oneparam=params[j].toString();
System.out.print("参数类型:"+oneparam+" ");
}
System.out.println();
}
}
/**
* 得到多个描述类Dept中方法的Field实例
* **/
public static void basereflect3(Object obj)
{
Method[] ms= obj.getClass().getDeclaredMethods();//?
for(int i=0;i<ms.length;i++)
{
Method m=ms[i];//?一个实例描述的是类中自己一个方法
String mname=m.getName();
if(mname.indexOf("get")!=-1) //getEmpid
{
try {
Object o = m.invoke(obj, null);
System.out.println(o.toString());
}catch (InvocationTargetException ex) {
ex.printStackTrace();
}catch (IllegalArgumentException ex) {
ex.printStackTrace();
}catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
System.out.println();
}
}
//反调实例中相应属性的set方法为属性付值
public static void invokeSet(Object obj,String fname,String value)
{
Object[] paras=new Object[1];
String type=getFieldType(obj,fname);
paras[0]=value;
if(type.equals(Integer.TYPE.toString()))//int
{
paras[0]=new Integer(value);
}else if(type.equals(Float.TYPE.toString())){
paras[0]=new Float(value);
}else if(type.equals(Double.TYPE.toString())){
paras[0]=new Double(value);
}
//先得到描述fname属性所对应的set方法的Method实例m
String fsetname=getGETSETName(fname,1);//1--set方法
Method[] ms=obj.getClass().getDeclaredMethods();
for(int i=0;i<ms.length;i++)
{
Method m=ms[i];//描述的是一个具体的方法
String mname=m.getName();//得到他所描述的方法名称
if(fsetname.equals(mname))
{
try{
m.invoke(obj, paras);
}catch (InvocationTargetException ex){
ex.printStackTrace();
}catch (IllegalArgumentException ex){
ex.printStackTrace();
}catch (IllegalAccessException ex){
ex.printStackTrace();
}
}
}
}
//反调get方法取得实例中相应属性的值
public static Object InvokeGet(Object obj,String fname)
{
Method m=getMethod(obj,fname,0);
Object value=null;
try{
value=m.invoke(obj,null);
}catch (IllegalArgumentException e){
e.printStackTrace();
}catch (IllegalAccessException e){
e.printStackTrace();
}catch (InvocationTargetException e){
e.printStackTrace();
}
return value;
}
//由类或类的实例以及属性的名称可以得到描述该属性的get或set方法的Method实例
public static Method getMethod(Object obj,String fname,int type)
{
Method m0=null;
String mname=getGETSETName(fname,type);
Method[] ms=obj.getClass().getDeclaredMethods();
for(int i=0;i<ms.length;i++)
{
Method m=ms[i];
String methodname=m.getName();
if(methodname.equals(mname)){
m0=m;
}
}
return m0;
}
public static String getGETSETName(String fname,int type)
{
if(type==0)
{
return "get"+fname.substring(0,1).toUpperCase()+fname.substring(1).toLowerCase();
}else{
return "set"+fname.substring(0,1).toUpperCase()+fname.substring(1).toLowerCase();
}
}
public static String getFieldType(Object obj,String fieldname)
{
Field[] fs= obj.getClass().getDeclaredFields();//得到多个描述类Dept中属性的Field实例
for(int i=0;i<fs.length;i++)
{
Field f=fs[i];
String fname=f.getName();//得到Field类实例所描述属性的名称
String type=f.getType().toString();
if(fname.equals(fieldname))
{
return type;
}
}
return null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -