A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李海晓 中级黑马   /  2012-6-15 16:55  /  1493 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写一个Dog 类的代理,计算出方法用时,但是传入参数其中一个是这个类所实现的接口。
我写了一个接口,没写任何方法,Dog类有一个Shout()方法,我用代理调用Shout()方法,结果没有这个方法。
也就是接口中也必须定义Shout()方法,
但是如果我想写些某个类的代理,不知道它实现了那些接口或者它没实现接口,
或者接口中没有定义这个类所有的方法怎么办?


public class Experiment {
public static void main(String[] args){

  Animal dog=(Animal)Proxy.newProxyInstance(
    Animal.class.getClassLoader(),
    new Class[]{Animal.class},
    new InvocationHandler() {
     long startTime=System.currentTimeMillis();
     Dog dog=new Dog();
     public Object invoke(Object proxy, Method method, Object[] args)
       throws Throwable {
       long startTime=System.currentTimeMillis();
       Object obj=method.invoke(dog, args);
       long endTime=System.currentTimeMillis();
       long consumeTime=endTime-startTime;
      System.out.println("方法用时"+consumeTime+"毫秒");
      return obj;
     }
    });
  dog.Shout();//错了。
  
}
}

class Dog implements Animal{
public void Shout(){
  System.out.println("wang wang");
}
}
interface Animal{

}

5 个回复

倒序浏览
关于动态代理类这部分我也没弄明白,回头还得多看几遍视频!
回复 使用道具 举报
这么平静,唉。
回复 使用道具 举报
估计这个问题比较难吧!
回复 使用道具 举报
import java.lang.reflect.*;

public class Demo {
public static void main(String[] args){

  Animal dog=(Animal)Proxy.newProxyInstance(
    Animal.class.getClassLoader(),
    new Class[]{Animal.class},
    new InvocationHandler() {
     long startTime=System.currentTimeMillis();
     Dog dog=new Dog();
     public Object invoke(Object proxy, Method method, Object[] args)
       throws Throwable {
       long startTime=System.currentTimeMillis();
       Object obj=method.invoke(dog, args);
       long endTime=System.currentTimeMillis();
       long consumeTime=endTime-startTime;
      System.out.println("方法用时"+consumeTime+"毫秒");
      return obj;
     }
    });
  dog.Shout();//错了。
  
}
}

class Dog implements Animal{
public void Shout(){
  System.out.println("wang wang");
}
}
interface Animal{

        void Shout();//这个地方你必须定义Shout()方法}
回复 使用道具 举报
李海晓 来自手机 中级黑马 2012-6-15 20:00:29
地板
我知道定义short方法.文题在后几行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马