日期:2014-05-20  浏览次数:20667 次

java是否可以把函数作为参数传递
我是一个JAVA新手,我设计了一个类,我想在另一个类中调用他的方法(通过参数)
我写了一个模型,我想请大侠帮我完成细节.

public class tool
{
  public void a()///方法a
  {
  ..........
  }
  public void b()//方法b
  {
  .........
  }
}

public class control()
{
  public void invoke(int i)
  {
  if(i==0)
  user.use(tool.a)//这里我想按需要调用不同的方法,且方法能不能作为参数传进去??如果能应怎么传??
  else
  user.use(tool.b)//这里我想按需要调用不同的方法,且方法能不能作为参数传进去??如果能应怎么传??
  }

}
public class user
{
  public void use(arg)//这里我想收到传进来的函数?可不可行?应当怎么接收?
  {
  arg();//这里调用的是tool.a 或者 tool.b ,可不可行?应当怎么调用?  
  }
}

------解决方案--------------------
利用反射。 大致的代码如下,给你个思路,有些地方用到的时候还需要具体完善。


类名最好大写

在use里面通过 
method.invoke(tool, null);可以调用Tool里面的方法


Java code

public class Tool {
    
    public void a()// /方法a
    {
        System.out.print("tool.a()...");
    }

    public void b()// 方法b
    {
        System.out.print("tool.b()...");
    }
}




public class Control {
    public void invoke(int flag) {
        User user = new User();
        try {
            switch (flag) {
            case 0:
                user.use(Tool.class.getMethod("a", null));
                break;
            default:
                user.use(Tool.class.getMethod("b", null));
                break;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}







import java.lang.reflect.Method;

public class User
{
    public void use(Method method)
    {
        Tool tool = new Tool();
        try {
            [color=#FF0000]method.invoke(tool, null);[/color]
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args){
        Control control = new Control();
        control.invoke(0);
    }
}