一般而言,尽量不要用方法指针,有高人写书道"应该用接口和内部内"代替,请大家给个例子,怎么替代:比如,我有一个方法myprint(int i,method f),是打印f(i)的,怎么用接口和内部类来替代? 

解决方案 »

  1.   

    我想那位高人可能是说在c++里可以将方法的指针传递给调用者。
    java里面不叫指针,只能用接口实现,其实这就是传说中的回调 --callback
      

  2.   

    //比如说
    // Helloooooo 要调用Test里的play方法,而Test的play方法又callback了Helloooooo 里的//myprint方法。public class Helloooooo implements Didoleo {

    public Helloooooo(){
    } public void domysth(){
    myprint(100);
    } public void myprint(int i){  // callback method
    System.out.println("Hello Helloooooo "+i);
    } public static void main(String[] args){
    Helloooooo helloooooo=new Helloooooo();
    Test test =new Test();
     test.play(helloooooo);
    }}
    //////////////////////////public interface Didoleo{

    public void domysth();}//////////////////////////public class Test{

    public void play(Didoleo didoleo){
    didoleo.domysth();
    }

    }
      

  3.   

    callback 有时候会在这种时候用到。
    比如,有一个exe或者dll(首先你不可能去修改这个exe),他的功能是完成一个文件copy ,
    但是可惜他没有进度条显示功能,但好在他这个copy功能的方法参数中
    有一个是方法的指针。那么我在调用这个copy功能的函数时,
    把我自己做的一个显示进度条的方法指针传给他,让他完成copy
    的同时又回掉我自己实现的完成显示进度条的功能。上面说的是用C语言的实现。但是在java里面只能用接口来实现。同样你可能拿到一个class而不是java
    原文件。你也不可能去改这个class。
      

  4.   

    public class Test{   public void play(Didoleo didoleo){
          //比如这里做一些play的事情
          didoleo.domysth();  //这里就被插入了本来play没有的功能,而这些功能是动态的。
                              //你想让他干什么就在myprint里面实现。这样就使的Test类"活"
                              //起来了,也是扩展Test类的一种途径。现在不是提倡面向接口变   程    吗
       }}