看你的昵称还不错。就帮你实现,具体请看api文档/*
 * Created on 2003-5-25
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 *//**
 * @author youyongming
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
import java.lang.reflect.*;public class test1 {
private int number = 5;
public Integer f1()
{
System.out.println("f1");
return new Integer(1);
}
public Integer f2()
{
System.out.println("f2");
return new Integer(1);
}
public Integer f3()
{
System.out.println("f3");
return new Integer(1);
}
public Integer f4()
{
System.out.println("f4");
return new Integer(0);
}
public Integer f5()
{
System.out.println("f5");
return new Integer(0);
}
public static void main(String[] args)
{
try{//载入该类
Class c = Class.forName("test1");
//循环五次
for (int i=1; i <= 5; i++)
{
//找到方法映射
Method m = c.getMethod("f"+i, null);
//调用函数
Integer ii = (Integer)m.invoke(c.newInstance(), null);
//如果返回false则跳出循环
if (ii.intValue() == 1)
continue;
else
break;
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    可以用 switch 语句啊 很简单
      

  2.   

    onefox(一品狐) 是已经反朴归真的高手
      

  3.   

    一点质疑,见谅。1.如果一个真实的类里的方法取名为f1,f2...这应该是一个糟糕的设计。2.如果程序过多使用invoke,恐怕显得花巧有余而稳健不足。3.工作流中的链状方法调用,抽象为责任链模式可能较妥当。
      

  4.   

    dayn9(无知者无罪)
    --
    Goog idea!
    我也有一个想法,在责任呈现水平而非垂直状态的情况下,使用Mediator模式,或许更好。大家认为呢?
      

  5.   

    我所说的f1,f2...并非实际方法名,只是为了说明问题省点事,实际方法名是没有规律的
    dayn9(无知者无罪)能否详细阐述一下
    “工作流中的链状方法调用,抽象为责任链模式可能较妥当。”
    SureBeiJing(自由自在) 能否详细阐述一下
    “在责任呈现水平而非垂直状态的情况下,使用Mediator模式,或许更好”
    谢谢
      

  6.   

    to  SureBeiJing(自由自在)Mediator的本意是降低对象的网状耦合,在和这里的目标不太一直,不过其形式到是可以借鉴的,大概也是一种灵活运用吧。to 楼主:sorry,一言难尽,如果完全解释清楚至少要上千字。工作流中涉及到许多模式的运用,所以建议你去看看设计模式的书,肯定会受益无穷。经典的有《设计模式》(难!),通俗的有《java与模式》(初学建议)。届时,有什么不解的地方,我们可以共同探讨。
      

  7.   

    public void f() {
        switch(0) {
            case 1: 
                if(f1()) break;
            case 2: 
                if(f2()) break;
            case 3: 
                if(f3()) break;
            ……
            ……
        }
    }
      

  8.   

    ◎(#※×¥ 错了!这样
    public void f() {
        switch(0) {
            case 1: 
                if( !f1() ) break;
            case 2: 
                if( !f2() ) break;
            case 3: 
                if( !f3() ) break;
            ……
            ……
        }
    }