91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .java
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-14
  • 語言: Java
  • 標簽:

資源簡介

該工具類下載后拷貝到你要用的包,只需該包名即可

資源截圖

代碼片段和文件信息

package?cn.reflection;

import?java.lang.reflect.Field;
import?java.lang.reflect.InvocationTargetException;
import?java.lang.reflect.Method;
import?java.lang.reflect.ParameterizedType;
import?java.lang.reflect.Type;


/**
?*?封裝了反射的基礎方法
?*?object?invoke(object?obj?String?methodName?object...?args)?執行指定類的某個方法方法
?*?object?invoke(String?className?String?methodNameobject...?args)?
?*?Method?getMethod(Class?cla?String?methodNameClass...?parametersType)?獲取指定的方法(包括父類方法)
?*?object?getFieldValue(object?obj?String?fieldName)?獲取字段值
?*?Field?getField(Class?cla?String?fieldName)?獲取指定字段
?*?void?setFieldValue(object?obj?String?fieldNameobject?val)?設置指定字段值
?*?void?setFieldValue(String?classNameString?fieldNameobject?val)
?*?Class?getGenericSuperClass(Class?className?int?index?)?獲取泛型類的參數類型??index索引是從0開始的
?*?
?*??由于剛剛把java反射學了,此工具作為練習寫的,有很多不足還望指教,本人qq郵箱834259846@qq.com
?*?
?*?@author?dp
?*
?*/
public?class?ReflectionUtils?{

/**
?*?通過反射來執行指定的方法(該方法可能是父類中的,也可能當前類私有的,但不能得到父類中私有的)
?*?
?*?@param?obj
?*????????????傳入要執行方法對應的對象
?*?@param?methodName
?*????????????要執行的方法名
?*?@param?args
?*????????????執行方法的參數
?*?@return
?*/
@SuppressWarnings(“rawtypes“)
public?static?object?invoke(object?obj?String?methodName?object...?args){
//?Class類型的數組存儲參數對應的.class類型
Class[]?parametersType?=?new?Class[args.length];
for?(int?i?=?0;?i? parametersType[i]?=?args[i].getClass();
}

Method?method?=?getMethod(obj.getClass()?methodName?parametersType);

try?{
return?method.invoke(obj?args);
}?catch?(IllegalAccessException?e)?{
System.out.println(“父類中的私有方法,你不可訪問!!!“);
e.printStackTrace();
}?catch?(IllegalArgumentException?e)?{
e.printStackTrace();
}?catch?(InvocationTargetException?e)?{
e.printStackTrace();
}

return?null;
}

/**
?*?獲取指定的方法(可能在父類中)?從當前類找指定要的方法,若沒有則循環向繼承的父類查找,一旦找到便返回
?*?只有傳入的當前類才可看見私有的,父類中的則不可以
?*?
?*?@param?cla
?*????????????類
?*?@param?methodName
?*????????????方法名
?*?@param?parametersType
?*????????????參數類型
?*?@return
?*/
public?static?Method?getMethod(Class?cla?String?methodName
Class...?parametersType)?{
boolean?isFirstClass?=?true;
for?(;?cla?!=?object.class;?cla?=?cla.getSuperclass())?{
Method?method?=?null;
try?{
method?=?cla.getDeclaredMethod(methodName?parametersType);
if(isFirstClass){
//父類的私有方法是不能獲取的
method.setAccessible(true);
isFirstClass?=?false;
}
return?method;
}?catch?(Exception?e)?{
//?當沒找到對應的方法時報的異常不做處理,讓其進行下一次循環,查找繼承的父類是否有該方法
}finally{
//當傳進來的第一個類拋了異常,那么之后獲取的都是父類,所有讓前面的if條件不能執行
isFirstClass?=?false;
}
}

return?null;
}

/**
?*?重載上面的invoke方法,通過傳入的類名執行指定的方法
?*?
?*?@param?className
?*????????????通過傳入的類名
?*?@param?methodname
?*????????????方法名
?*?@param?args
?*????????????方法入口參數
?*?@return
?*/
public?static?object?invoke(String?className?Strin

評論

共有 條評論

相關資源