如何动态生成函数表达式???
例如有一个函数
Goto([[context,]extension,]priority)
其中context参数是可以省略的,extension也是可以省略的,priority参数必须;也就是有以下3中变体:
Goto(context,extension,priority) 
Goto(extension,priority) 
Goto(priority) 根据输入的参数生成对应的表达式
例如
输入context=1,extension=2,priority=3;则生成Goto(1,2,3)
输入extension=2,priority=3;则生成Goto(2,3)
输入priority=3;则生成Goto(3)输入context=1,priority=3;则生成Goto(3)

解决方案 »

  1.   

    在你的类里面写三个函数,参数个数分别是
    Goto(context,extension,priority) 
    Goto(extension,priority) 
    Goto(priority) 
    就解决了啊调用的时候,java会根据传入参数的个数,判断调用的是哪个函数
      

  2.   

    这是函数的重载.
    你需要定义三个不同的方法'
    Goto(context,extension,priority) 
    Goto(extension,priority) 
    Goto(priority) 然后程序调用时。如你只有一个参数.程序则自动调用
    只有一个参数那个。以此类推.
      

  3.   

    如果输入context=1,priority=3;则生成Goto(3)
    而不是Goto(1,3)
    如果像您说的那么简单就好了
      

  4.   

    表达试为Goto([[context,]extension,]priority)
    根据提供输入的参数
    context,extension,priority的值生成对应的表达试,我已经说的很清楚了啊?
    输入context=1,extension=2,priority=3;则生成的语句为Goto(1,2,3)
    输入extension=2,priority=3;则生成的语句为Goto(2,3)
    输入priority=3;则生成Goto的语句为(3)
    输入context=1,priority=3;则生成的语句为Goto(3)
      

  5.   

    我给一个参考实现的方法,但不是最好的,希望能有一个更好的解决办法。。
    感激不尽!!!
    package test;import java.util.*;public class Test { public static void main(String[] args) {
    String exp = "Goto([[context,]extension,]priority)";
    String exp1 = "GotoIf(condition?label1[:label2])";
    //String context = "IVRS_DYX_INCOMING";
    //String extension = "s";
    //String priority = "1";

    Parameter parameter1 = new Parameter();
    parameter1.setName("context");
    parameter1.setType("string");
    parameter1.setValue("IVRS_DYX_INCOMING");
    parameter1.setMandatory(false);
    parameter1.setSequence(new Integer(2));
    Parameter parameter2 = new Parameter();
    parameter2.setName("extension");
    parameter2.setType("string");
    parameter2.setValue("s");
    parameter2.setMandatory(false);
    parameter2.setSequence(new Integer(1));
    Parameter parameter3 = new Parameter();
    parameter3.setName("priority");
    parameter3.setType("string");
    parameter3.setValue("1");
    parameter3.setMandatory(true);
    parameter3.setSequence(new Integer(3));
    Parameter[] pa = { parameter1,parameter2,parameter3 };
    System.out.println(getExpression(exp,pa));
    }

    public static String getExpression(String expression, Parameter[] parameter) {
    String[] expr = new String[parameter.length];
    for(int ij=0;ij<parameter.length;ij++){
    if (!parameter[ij].getMandatory()&&"".equals(parameter[ij].getValue())) {
    int i = expression.indexOf(parameter[ij].getName());
    if (i == -1) expr[i] = expression;
    String ss = expression.substring(0, i);// left String
    String sLeft = expression.substring(0, i);// left String
    String sRight = expression.substring(i, expression.length());// right String
    if (sRight.indexOf("]") == -1)
    return "parameter value is mandatory";
    // left String
    int ii = 0;
    int jj = -1;
    while ((jj = sLeft.indexOf("]", jj + 1)) != -1) {
    ii++;
    }
    //
    for (int m = 0; m < ii; m++) {
    ss = ss.substring(0, ss.lastIndexOf("["));
    }
    int iLeft = ss.lastIndexOf("[");
    int iRight = sLeft.length() + sRight.indexOf("]");
    expr[ij] = expression.substring(0, iLeft)
    + expression.substring(iRight + 1, expression.length());

    else {
    expr[ij] = expression;
    }
    }
    String ee = expression;
    for(int j=0;j<expr.length;j++){
    if(expr[j].length()<=ee.length()){
    ee = expr[j];
    }
    }
    //return ee.replaceAll("\\[","").replaceAll("\\]","");
    String e = ee.replaceAll("\\[","").replaceAll("\\]","");
    for(int i=0;i<parameter.length;i++){
    e=e.replaceAll(parameter[i].getName(),parameter[i].getValue());
    }
    return e;
    }

    ××××××××××××××××××××××××××××××
    package test;
    public class Parameter{
    private String name;
    private String type;
    private String value;
    private boolean mandatory;
    private Integer sequence;
    public boolean getMandatory() {
    return mandatory;
    }
    public void setMandatory(boolean mandatory) {
    this.mandatory = mandatory;
    }
    public Integer getSequence() {
    return sequence;
    }
    public void setSequence(Integer sequence) {
    this.sequence = sequence;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getType() {
    return type;
    }
    public void setType(String type) {
    this.type = type;
    }
    public String getValue() {
    return value;
    }
    public void setValue(String value) {
    this.value = value;
    }
    }
      

  6.   

    在函数Goto(extension,priority) 里面加格判断
    if context =1 {
      Goto(priority) 
    }
    这样总行了吧