java - Java接口层次结构及其有界类型泛型的方法
问题描述
我有一个场景,我发现构建类型的层次结构如下:
IComponent(接口)-> AComponent(类)
在这里,我希望 IComponent 包含一个方法 execute() ,该方法将由实现此接口的所有类实现。现在,除了组件层次结构之外,我还想要所有组件的请求/响应格式,所以我想到了以下几点:
IComponentRequest -> AComponentRequest
IComponentResponse -> IComponentResponse
现在我想在 IComponent 中声明 execute() 方法,使所有想要实现的类都可以遵循上述请求/响应层次结构的请求和响应类。从代码的角度解释,我目前声明的方法如下:
public interface IComponent<IComponentRequest,IComponentResponse> {
IComponentResponse execute(IComponentRequest request);
}
我真正想要的是:
<Any type which implements IComponentResponse> execute(<Any type which implements IComponentRequest> request) {
}
我尝试使用泛型,例如:
public interface IComponent<REQUEST,RESPONSE> {}
但是在这些情况下,我在调用方法和接收 REQUEST 和 RESPONSE 不是任何特定 java 类型的响应时遇到了实现问题。因此,我再次继续使用正确的接口 IComponentRequest 和 IComponentResponse 但我无法应用有界泛型。
有人可以帮助我在这里缺少什么吗?
解决方案
当您指定通用名称时,您还可以指定类型信息。在这里,您希望extends
为每个适当的类型。就像是
public interface IComponent<REQUEST extends IComponentRequest,
RESPONSE extends IComponentResponse> {
RESPONSE execute(REQUEST request);
}
推荐阅读
- c# - 具有程序依赖注入的 Asp.Net 核心规则引擎 - 未找到类型“类型”的构造函数
- ios - 呼叫扩展功能 IOS Swift
- android - Why is Unity IAP service not working on Android production version?
- angular - 发送带有某人已登录令牌的标头
- firebase - 使用 Github Action 部署 Firebase
- r - 如何在 Ubuntu 中升级 IRKernel?
- php - Fatal error: require(): Failed opening required 'vendor/autoload.php' in Laravel project/Serpwow API
- python - 使用 selenium 抓取启用 Google 验证码“我不是机器人”的网站
- python - 如何在 VsCode 中定义 %time
- apache-spark - 如何避免过多的数据框查询