Java 动态方法调度
互联网上有很多关于动态调度的信息,我感觉自己像一只鸡,因为我无法实现它。请帮帮我。这就是我要做的Java 动态方法调度,java,oop,testng,dynamic-data,Java,Oop,Testng,Dynamic Data,互联网上有很多关于动态调度的信息,我感觉自己像一只鸡,因为我无法实现它。请帮帮我。这就是我要做的 ClassA{ public void createReq(){ } public String postReq(){ } } ClassB{ @Test public void myTest(){ Class A = new ClassA(); a.createReq(); String test = a.getResponse(); /* Not su
ClassA{
public void createReq(){
}
public String postReq(){
}
}
ClassB{
@Test
public void myTest(){
Class A = new ClassA();
a.createReq();
String test = a.getResponse();
/* Not sure how do i do this part */
}
因此,我在myTest
方法中得到一个字符串'test'
。我想创建一个扩展ClassB
的ClassC
,并编写一个方法,在步骤后不久(a.getResponse()
)验证myTest
中返回的字符串
如果没有实现ClassC
,我只想简单地结束测试。如果只有ClassC
存在并实现了一个验证方法,我希望完成验证
我该怎么做?请帮忙。谢谢。尝试加载带有反射的ClassC。 如果该尝试失败,则ClassC不存在,因此默认情况下验证是正常的。 如果ClassC存在,请尝试找到合适的方法并使用反射调用它。 如果您没有找到该方法,那么验证在默认情况下也是可以的(我猜)。 如果您找到了该方法,并且对它的调用返回true,那么您就完成了验证。如果此调用返回false,则验证失败 检查这些链接,我想你应该明白我说的
您可以创建一个
Dispatcher
接口,该接口只定义一个方法dispatch(String)
(或您尝试实现的任何方法)。基类(ClassB)使用NullPattern实现接口,而子类(ClassC)根据需要实现接口
界面非常简单:
public interface Dispatcher
{
public void dispatch(String message);
}
NullPattern的实现方式如下:
public class NullDispatcher implements Dispatcher
{
public void dispatch(String message)
{
// do nothing
}
}
public class ClassB
{
private Dispatcher dispatcher;
public ClassB()
{
dispatcher = new NullDispatcher();
}
public void setDispatcher(Dispatcher dispatcher)
{
// change this to your needs
if (dispatcher == null)
dispatcher = new NullDispatcher();
else
this.dispatcher = dispatcher;
}
@Test
public void myTest()
{
ClassA a = new ClassA();
a.createRequest();
String test = a.getResponse();
dispatcher.dispatch(test);
}
}
public class ConsoleDispatcher implements Dispatcher
{
public void dispatch(String message)
{
System.out.println(message);
}
}
ClassB应该这样修改:
public class NullDispatcher implements Dispatcher
{
public void dispatch(String message)
{
// do nothing
}
}
public class ClassB
{
private Dispatcher dispatcher;
public ClassB()
{
dispatcher = new NullDispatcher();
}
public void setDispatcher(Dispatcher dispatcher)
{
// change this to your needs
if (dispatcher == null)
dispatcher = new NullDispatcher();
else
this.dispatcher = dispatcher;
}
@Test
public void myTest()
{
ClassA a = new ClassA();
a.createRequest();
String test = a.getResponse();
dispatcher.dispatch(test);
}
}
public class ConsoleDispatcher implements Dispatcher
{
public void dispatch(String message)
{
System.out.println(message);
}
}
这里可以使用setDispatcher(Dispatcher)
方法设置新的Dispatcher
。此分派器将在myTest
中用于分派a.getResponse()
的结果
扩展类只需要设置调度程序的特定实现。F.e.要将响应打印到控制台,您可以实现如下ConsoleDispatcher
:
public class NullDispatcher implements Dispatcher
{
public void dispatch(String message)
{
// do nothing
}
}
public class ClassB
{
private Dispatcher dispatcher;
public ClassB()
{
dispatcher = new NullDispatcher();
}
public void setDispatcher(Dispatcher dispatcher)
{
// change this to your needs
if (dispatcher == null)
dispatcher = new NullDispatcher();
else
this.dispatcher = dispatcher;
}
@Test
public void myTest()
{
ClassA a = new ClassA();
a.createRequest();
String test = a.getResponse();
dispatcher.dispatch(test);
}
}
public class ConsoleDispatcher implements Dispatcher
{
public void dispatch(String message)
{
System.out.println(message);
}
}
要在ClassC
中使用ConsoleDispatcher
而不是NullDispatcher
,可以使用类似以下代码:
public class ClassC extends ClassB
{
public ClassC()
{
this.setDispatcher(new ConsoleDispatcher());
}
}
随着ClassC扩展ClassB,您将有权访问myTest
,它使用定义的分派器相应地分派消息
HTH这与动态调度有什么关系?@OliCharlesworth:有没有其他方法可以实现这一点?或者我的问题应该是:我如何才能做到以上几点?顺便说一句,我认为Roman Vottner的解决方案会更干净、更容易实现。