中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java javassist庫處理類的基本用法

發布時間:2020-07-27 16:24:58 來源:網絡 閱讀:463 作者:wx5d21d5e6e5ab1 欄目:編程語言
public class Dema {

//獲取原方法信息
public static void test01() throws Exception
{
    ClassPool pool=ClassPool.getDefault();
    CtClass cc=pool.get("cn.sxt.in.Emp");   //獲得已有的類

    byte[] bytes=cc.toBytecode();  //轉換成字節碼
    System.out.println(cc.getName()); //獲取類名
    System.out.println(cc.getSimpleName()); //獲取簡要類名
    System.out.println(cc.getSuperclass()); //獲取父類
    System.out.println(Arrays.toString(bytes));
    System.out.println(cc.getInterfaces()); //獲取接口,返回的是數組
}

//添加方法
public static void test02() throws Exception
{
    ClassPool pool =ClassPool.getDefault();
    CtClass cc=pool.get("cn.sxt.in.Emp");

    //創建新方法
    CtMethod m=CtNewMethod.make("public int add(int a,int b){return a+b;}", cc);
    //創建新方法
    CtMethod m2=new CtMethod(CtClass.intType,"add2",new CtClass[] {CtClass.intType,CtClass.intType},cc);
    m2.setModifiers(Modifier.PUBLIC);   //設置權限
    m2.setBody("{System.out.println(\"yes\");return $1+$2;}"); //占位符代替形參名

    cc.addMethod(m2);
    cc.addMethod(m);

    //通過反射調用新生成的方法

    Class clazz=cc.toClass();
    Object obj=clazz.newInstance(); //通過調用Emp的無參構造器,創建新的Emp對象
    Method method=clazz.getDeclaredMethod("add2",int.class,int.class);
    Object result=method.invoke(obj, 200,300);
    System.out.println(result);

}
//修改方法
public static void test03() throws Exception
{
    ClassPool pool=ClassPool.getDefault();
    CtClass cc=pool.get("cn.sxt.in.Emp");

    CtMethod cm=cc.getDeclaredMethod("sayHello",new CtClass[] {CtClass.intType});
    //在方法開頭添加內容
    cm.insertBefore("System.out.println($1);System.out.println(\"start\");");
    //在某一行前面加代碼
    cm.insertAt(8, "System.out.println(\"ugly\");");
    //在方法后面加內容
    cm.insertAfter("System.out.println(\"end\");");

    Class clazz=cc.toClass();
    Object obj=clazz.newInstance(); //通過調用Emp的無參構造器,創建新的Emp對象
    Method method=clazz.getDeclaredMethod("sayHello",int.class);
    method.invoke(obj,300);
}
//修改屬性
public static void test04() throws Exception
{
    ClassPool pool=ClassPool.getDefault();
    CtClass cc=pool.get("cn.sxt.in.Emp");

    CtField f1=CtField.make("private int emm;", cc);
    CtField f2=new CtField(CtClass.intType,"emm2",cc);
    f2.setModifiers(Modifier.PRIVATE);

    cc.addField(f1,"100"); //傳默認值
    cc.addField(f2);

    //cc.getDeclaredField("ename"); 獲取指定屬性

    //增加相應的set和get方法
    cc.addMethod(CtNewMethod.getter("getEmm2", f2));
    cc.addMethod(CtNewMethod.getter("setEmm2", f2));

}

//構造器
public static void test05() throws Exception
{
    ClassPool pool=ClassPool.getDefault();
    CtClass cc=pool.get("cn.sxt.in.Emp");

    CtConstructor[] cs= cc.getConstructors();
    for(CtConstructor c:cs)
    {
        System.out.println(c.getLongName());

    }

}
//調用注解
public static void test06() throws Exception
{
    ClassPool pool=ClassPool.getDefault();
    CtClass cc=pool.get("cn.sxt.in.Emp");

    Object[] all=cc.getAnnotations();
    Author a=(Author)all[0];
    String name=a.name();
    int year=a.year();
    System.out.println("name:"+name+",year:"+year);

}
public static void main(String[] args) throws Exception {

    test06();
}
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泽库县| 苏州市| 井研县| 东乡县| 金阳县| 吴江市| 安岳县| 安新县| 长宁县| 黄陵县| 南昌市| 察隅县| 萨迦县| 麻城市| 资溪县| 政和县| 林甸县| 建昌县| 克什克腾旗| 湖州市| 泾阳县| 聂拉木县| 伊金霍洛旗| 嵩明县| 田阳县| 东乡县| 景德镇市| 阿巴嘎旗| 庄浪县| 天镇县| 宁南县| 柞水县| 咸阳市| 五家渠市| 红原县| 纳雍县| 吴堡县| 萨嘎县| 富源县| 会宁县| 钦州市|