gpt4 book ai didi

java - 重写泛型类中的方法

转载 作者:行者123 更新时间:2023-12-02 08:10:05 25 4
gpt4 key购买 nike

我正在重构一些单元测试。基本上,我发现不同客户端的单元测试实现了一系列方法,例如:createClientWithNullResponse、createClientWithSuccessResponse 等。

我想知道是否有可能在Java中实现一个通用的解决方案,因为这个方法在数百个单元类中一遍又一遍地重复,只改变方法签名。

但是,有一个棘手的问题。查看方法示例:

/**
* configures the client to return a succesful response
* @return a client configured to return a succesful response
*/
private Client1 configureClientWithSuccesfulResponse()
{
client = new Client1()
{
public CommonClientResponse processRequest( CommonsClientRequest commonsClientRequest )
{
CommonClientResponse commonClientResponse = new CommonClientResponse();
commonClientResponse.setResponse( new Client1Response() );
return commonClientResponse;
}
};
return client;
}

因此,client2 将具有完全相同的方法,只是签名具有 Client2,并且重写的方法会创建一个新的 Client2Response,对于数十个客户端也是如此。

附加信息:processRequest 被重写以充当模拟,为每个方法设置我希望的响应。Client1 扩展了 CommonsWS,后者扩展了 AbstractCommons,它是一个抽象类,但包含 processRequest 方法的实现。

总而言之,我的想法是为所有单元测试创​​建一个基类,其中包含一组通用方法,我可以在其中传递类类型,然后为每个测试重写 processRequest。我试过了:

public class base <T extends AbstractCommonClient>{

private T configureClientWithNullResponse(Class <? extends AbstractCommonClient> clazz, Class< ? extends ClientResponse> clazz1)
{

try
{
return clazz.newInstance()
{
CommonClientResponse processRequest( CommonsClientRequest commonsClientRequest )
{
CommonClientResponse commonClientResponse = new CommonClientResponse();
commonClientResponse.setResponse( clazz1.newInstance() );
return commonClientResponse;
};
};
}
}

}

但它甚至无法编译。您对我如何开始实现这个有什么想法吗?

最佳答案

由于您实际上正在尝试创建一个在运行时类型未知的匿名类,因此您是否考虑过在运行时调用编译器?我自己用得不多,但可能值得研究一下。您可以使用

来调用它
JavaCompiler compiler = javax.tools.ToolProvider.getSystemJavaCompiler();

请注意,只有当应用程序在安装了 JDK 的系统上运行时,这才有效,如 JRE (does not include javac) .

关于java - 重写泛型类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com