我已实施关键字驱动自动化框架。我以函数/方法的形式定义了所有关键字(每个关键字作为一种方法,我有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对象来实现这一点。
答案 0 :(得分:0)
能够使用以下代码动态传递类对象。
String className = "Add";
Object xyz = Class.forName(className).newInstance();
Context ctx=new Context(xyz);
ctx.processKeyword();
在上面的代码中:我将“Add”分配给String变量,即classname(Add是我的类名之一),我可以将任何类名传递给classname变量,然后调用相应的类。它采用动态方法正常工作。
但我不确定,这有多高效。任何人都可以建议这种方法是否正常。