黑马程序员技术交流社区

标题: Proxy代理问题 [打印本页]

作者: 李海晓    时间: 2012-6-15 16:55
标题: Proxy代理问题
写一个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{

}


作者: 李盼    时间: 2012-6-15 17:07
关于动态代理类这部分我也没弄明白,回头还得多看几遍视频!
作者: 李海晓    时间: 2012-6-15 19:41
这么平静,唉。
作者: 李盼    时间: 2012-6-15 19:47
估计这个问题比较难吧!
作者: 张頔    时间: 2012-6-15 19:49
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
我知道定义short方法.文题在后几行




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2