如何调用与String相同的类

时间:2016-09-10 14:22:42

标签: java automation frameworks

我已实施关键字驱动自动化框架。我以函数/方法的形式定义了所有关键字(每个关键字作为一种方法,我有100 +关键字即方法)。

Class<?> c = Class.forName("class name");
Method  method = c.getDeclaredMethod ("method name", parameterTypes)
method.invoke (objectToInvokeOn, params)

我可以使用上面的Java Reflation调用与String相同的方法。

现在我需要更改实现:我需要将所有函数转换为单独的类(每个函数作为每个类)。所以我正在寻找如何调用与字符串相同的类名。请帮忙。

我正在尝试使用如下所示的策略模式实现相同的目标:

******************** Step1 ********************* // Strategy.java (界面)

public interface Strategy {

public void executeKeyword();

}

******************** Step2 ***************** // Add.java

公共类添加实现策略{

public void executeKeyword() 
{

    System.out.println("----Inside the Addition----");
}

}

// Sub.java

public class Sub实现策略{

public void executeKeyword() 
{

    System.out.println("----Inside the substraction----");
}

}

// Multi.java

公共类Multi实现策略{

public void executeKeyword() 
{

    System.out.println("----Inside the multiplication----");

}

}

********************第3步************************** *****

公共类Context {

private Strategy strategy;

public Context(Strategy str)
{
    this.strategy=str;
}

public void processKeyword()
{
    strategy.executeKeyword();{

    }
}

}

******************** Step4 ***********

公共课演示{

public static void main(String[] args) throws ClassNotFoundException {


    Context ctx=new Context(new Add());
    //Context ctx=new Context(new Sub());
    //Context ctx=new Context(new Multi());

    ctx.processKeyword();

    }

}

是否有任何选项可以动态地在Context Object中传递类名(Add,Sub,Mulit)。

Context ctx = new Context(new Add()); ---&gt;在这里我传递Add,下次我应该传递Sub,然后Multi ...如何通过维护单个cxt对象来实现这一点。

1 个答案:

答案 0 :(得分:0)

能够使用以下代码动态传递类对象。

String className = "Add";  
        Object xyz = Class.forName(className).newInstance();
        Context ctx=new Context(xyz);
        ctx.processKeyword();

在上面的代码中:我将“Add”分配给String变量,即classname(Add是我的类名之一),我可以将任何类名传递给classname变量,然后调用相应的类。它采用动态方法正常工作。

但我不确定,这有多高效。任何人都可以建议这种方法是否正常。