亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

作業是怎么實現的?

最后那個作業是怎么實現的?

正在回答

3 回答

樓上正解

0 回復 有任何疑惑可以回復我~

接上面回答,調用時候得到日志記錄的對象后, 再通過LogHandler代理一次即可:代碼如下:

public?static?void?main(String[]?args)?{
Moveable?car?=?new?Car();

InvocationHandler?timeHandler?=?new?TimeHandler(car);

Class<?>?cls?=?car.getClass();

/**
*?loader:類加載器<br>
*?interfaces:實現接口<br>
*?h?InvocationHandler<br>
*/
Moveable?timeCar?=?(Moveable)?Proxy.newProxyInstance(
cls.getClassLoader(),?cls.getInterfaces(),?timeHandler);

InvocationHandler?logHandler?=?new?LogHandler(timeCar);

Moveable?logCar?=?(Moveable)?Proxy.newProxyInstance(
cls.getClassLoader(),?cls.getInterfaces(),?logHandler);

logCar.move();
}


8 回復 有任何疑惑可以回復我~
#1

Mr_Vision

Moveable logCar = (Moveable) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), logHandler); 返回值為什么可以強轉成Moveable ,依據是什么?為什么直接轉成實現類不行
2015-07-23 回復 有任何疑惑可以回復我~

在寫一個日志代理

public class LogHandler implements InvocationHandler {


private Object target;

public LogHandler(Object target) {

super();

this.target = target;

}




/**

* 參數

* proxy 被代理對象

* method 被代理對象的方法

* args 方法的參數

*?

* 返回值:

* Object 方法的返回值

*?

*/

@Override

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable {

System.out.println("日志開始。。。");

method.invoke(target);

System.out.println("日志結束。。。");

return null;

}


}


0 回復 有任何疑惑可以回復我~
#1

西_瓜 提問者

你的意思是記錄日志的時候汽車要跑一次,我在記錄時間的時候 汽車又要跑一次 記錄一次汽車就跑一次嗎?(PS:汽車跑一次是指調用move() Method)。
2014-12-25 回復 有任何疑惑可以回復我~
#2

JasonLau007 回復 西_瓜 提問者

不是的。按照苦逼工程師的方法做
2015-02-22 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

作業是怎么實現的?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號